diff --git a/.env.example b/.env.example index 7e94b2e..f2e2627 100644 --- a/.env.example +++ b/.env.example @@ -3,29 +3,22 @@ # This file will be committed to version control, so make sure not to have any secrets in it. # If you are cloning this repo, create a copy of this file named `.env` and populate it with your secrets. ## Next.js ## -NODE_ENV=development -CI=false -SITE_URL= +NODE_ENV= SENTRY_AUTH_TOKEN= -NEXT_PUBLIC_SITE_URL= -NEXT_PUBLIC_CONVEX_URL= -NEXT_PUBLIC_PLAUSIBLE_URL= +NEXT_PUBLIC_SITE_URL=https://example.com +NEXT_PUBLIC_CONVEX_URL=https://api.convex.example.com # convex-backend:3210 +NEXT_PUBLIC_PLAUSIBLE_URL=https://plausible.example.com NEXT_PUBLIC_SENTRY_DSN= -NEXT_PUBLIC_SENTRY_URL= -NEXT_PUBLIC_SENTRY_ORG= -NEXT_PUBLIC_SENTRY_PROJECT_NAME= +NEXT_PUBLIC_SENTRY_URL=https://sentry.example.com +NEXT_PUBLIC_SENTRY_ORG=sentry +NEXT_PUBLIC_SENTRY_PROJECT_NAME=example ## Convex ## -CONVEX_SELF_HOSTED_URL= -CONVEX_SELF_HOSTED_ADMIN_KEY= -SETUP_SCRIPT_RAN= +CONVEX_SELF_HOSTED_URL=https://api.convex.example.com # convex-backend:3210 +CONVEX_SELF_HOSTED_ADMIN_KEY= # Generate after hosted on docker # Convex Auth -AUTH_URL=convex.example.com +CONVEX_SITE_URL=https://convex.example.com # convex-backend:3211 USESEND_API_KEY= AUTH_AUTHENTIK_ID= AUTH_AUTHENTIK_SECRET= AUTH_AUTHENTIK_ISSUER= -AUTH_MICROSOFT_ENTRA_ID_ID= -AUTH_MICROSOFT_ENTRA_ID_SECRET= -AUTH_MICROSOFT_ENTRA_ID_ISSUER= -AUTH_MICROSOFT_ENTRA_ID_AUTH_URL= diff --git a/apps/expo/.cache/.prettiercache b/apps/expo/.cache/.prettiercache new file mode 100644 index 0000000..4fbe789 --- /dev/null +++ b/apps/expo/.cache/.prettiercache @@ -0,0 +1 @@ +[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21"],{"key":"22","value":"23"},{"key":"24","value":"25"},{"key":"26","value":"27"},{"key":"28","value":"29"},{"key":"30","value":"31"},{"key":"32","value":"33"},{"key":"34","value":"35"},{"key":"36","value":"37"},{"key":"38","value":"39"},{"key":"40","value":"41"},{"key":"42","value":"43"},{"key":"44","value":"45"},{"key":"46","value":"47"},{"key":"48","value":"49"},{"key":"50","value":"51"},{"key":"52","value":"53"},{"key":"54","value":"55"},{"key":"56","value":"57"},{"key":"58","value":"59"},{"key":"60","value":"61"},{"key":"62","value":"63"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/package.json",{"size":2249,"mtime":1766222924000,"hash":"64","data":"65"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/index.ts",{"size":28,"mtime":1768155639384,"hash":"66","data":"67"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/metro.config.js",{"size":511,"mtime":1768155639442,"hash":"68","data":"69"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/app/index.tsx",{"size":5019,"mtime":1768155639734,"hash":"70","data":"71"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/turbo.json",{"size":163,"mtime":1766222924000,"hash":"72","data":"73"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/postcss.config.js",{"size":66,"mtime":1768155639501,"hash":"74","data":"75"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/eas.json",{"size":567,"mtime":1766222924000,"hash":"76","data":"77"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/.expo-shared/assets.json",{"size":155,"mtime":1766222924000,"hash":"78","data":"79"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/app/_layout.tsx",{"size":927,"mtime":1768155639581,"hash":"80","data":"81"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/nativewind-env.d.ts",{"size":246,"mtime":1766222924000,"hash":"82","data":"83"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/utils/auth.ts",{"size":398,"mtime":1768155639911,"hash":"84","data":"85"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/app/post/[id].tsx",{"size":757,"mtime":1768155639785,"hash":"86","data":"87"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/styles.css",{"size":90,"mtime":1768155639819,"hash":"88","data":"89"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/utils/session-store.ts",{"size":272,"mtime":1768155639965,"hash":"90","data":"91"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/assets/icon-dark.png",{"size":19633,"mtime":1766222924000,"hash":"92"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/eslint.config.mts",{"size":275,"mtime":1768155639360,"hash":"93","data":"94"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/utils/api.tsx",{"size":1326,"mtime":1768155639881,"hash":"95","data":"96"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/src/utils/base-url.ts",{"size":880,"mtime":1768155639943,"hash":"97","data":"98"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/app.config.ts",{"size":1333,"mtime":1768155639275,"hash":"99","data":"100"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/assets/icon-light.png",{"size":19133,"mtime":1766222924000,"hash":"101"},"/home/gib/Documents/Code/convex-monorepo/apps/expo/tsconfig.json",{"size":387,"mtime":1766228480000,"hash":"102","data":"103"},"d8763702c14cdc382dcfb84f6f9a068f",{"hashOfOptions":"104"},"11cdbef6afa001cd39bc187041ca6865",{"hashOfOptions":"105"},"dbe97bcde588a81538bbcd6a9befdddd",{"hashOfOptions":"106"},"1c10eb388cf5dcbc87d2d63770a227f1",{"hashOfOptions":"107"},"c7d4dcf839dfeaa02e0407adfd5e47a6",{"hashOfOptions":"108"},"b7edffce093c4c84092cc93f3dc208ef",{"hashOfOptions":"109"},"a3c1487f8318513ae7c156acc857fde2",{"hashOfOptions":"110"},"0f7f54c7161b8403d3bc42d91f59cd91",{"hashOfOptions":"111"},"8e407b4b1b0c0bd9c862a00243344be3",{"hashOfOptions":"112"},"d4d589c153ac8b5e7bf0fb130a5b5a7d",{"hashOfOptions":"113"},"cecbed1604a530a7cc099fecddddd76c",{"hashOfOptions":"114"},"4fcefde979d34a7339f7a266d3ec931b",{"hashOfOptions":"115"},"52a1d72379b952dd802f47e1865bd0da",{"hashOfOptions":"116"},"1bc3e15a40c117eecc51294886ea9b38",{"hashOfOptions":"117"},"1e8ac0d261e95efb19d290ffcf70ce36","1c1710ce3de3ce02e8054cc3787c8579",{"hashOfOptions":"118"},"5ff899a601102659dcbd2900e415ce8b",{"hashOfOptions":"119"},"dd2007a211e323deabb3f7fa7d16313f",{"hashOfOptions":"120"},"4f49c6df7733f874fbe72b4e20b3092b",{"hashOfOptions":"121"},"863da15dbd856008b7c24077ca746d91","6937fb7370f1e17491df649888d6ecc9",{"hashOfOptions":"122"},"2742538293","3367041120","3963086909","3173464737","3850474653","3346849767","2045418596","3048291867","3525769784","4000169781","471581913","1427279653","2305419495","818733105","2587128410","1262173017","408469422","2836740315","2315460658"] \ No newline at end of file diff --git a/apps/expo/app.config.ts b/apps/expo/app.config.ts index 1f42aaa..3689574 100644 --- a/apps/expo/app.config.ts +++ b/apps/expo/app.config.ts @@ -1,32 +1,32 @@ -import type { ConfigContext, ExpoConfig } from "expo/config"; +import type { ConfigContext, ExpoConfig } from 'expo/config'; export default ({ config }: ConfigContext): ExpoConfig => ({ ...config, - name: "expo", - slug: "expo", - scheme: "expo", - version: "0.1.0", - orientation: "portrait", - icon: "./assets/icon-light.png", - userInterfaceStyle: "automatic", + name: 'expo', + slug: 'expo', + scheme: 'expo', + version: '0.1.0', + orientation: 'portrait', + icon: './assets/icon-light.png', + userInterfaceStyle: 'automatic', updates: { fallbackToCacheTimeout: 0, }, newArchEnabled: true, - assetBundlePatterns: ["**/*"], + assetBundlePatterns: ['**/*'], ios: { - bundleIdentifier: "your.bundle.identifier", + bundleIdentifier: 'your.bundle.identifier', supportsTablet: true, icon: { - light: "./assets/icon-light.png", - dark: "./assets/icon-dark.png", + light: './assets/icon-light.png', + dark: './assets/icon-dark.png', }, }, android: { - package: "your.bundle.identifier", + package: 'your.bundle.identifier', adaptiveIcon: { - foregroundImage: "./assets/icon-light.png", - backgroundColor: "#1F104A", + foregroundImage: './assets/icon-light.png', + backgroundColor: '#1F104A', }, edgeToEdgeEnabled: true, }, @@ -42,17 +42,17 @@ export default ({ config }: ConfigContext): ExpoConfig => ({ reactCompiler: true, }, plugins: [ - "expo-router", - "expo-secure-store", - "expo-web-browser", + 'expo-router', + 'expo-secure-store', + 'expo-web-browser', [ - "expo-splash-screen", + 'expo-splash-screen', { - backgroundColor: "#E4E4E7", - image: "./assets/icon-light.png", + backgroundColor: '#E4E4E7', + image: './assets/icon-light.png', dark: { - backgroundColor: "#18181B", - image: "./assets/icon-dark.png", + backgroundColor: '#18181B', + image: './assets/icon-dark.png', }, }, ], diff --git a/apps/expo/eslint.config.mts b/apps/expo/eslint.config.mts index 84c3e9d..77d2f63 100644 --- a/apps/expo/eslint.config.mts +++ b/apps/expo/eslint.config.mts @@ -1,11 +1,10 @@ -import { defineConfig } from "eslint/config"; - -import { baseConfig } from "@acme/eslint-config/base"; -import { reactConfig } from "@acme/eslint-config/react"; +import { baseConfig } from '@acme/eslint-config/base'; +import { reactConfig } from '@acme/eslint-config/react'; +import { defineConfig } from 'eslint/config'; export default defineConfig( { - ignores: [".expo/**", "expo-plugins/**"], + ignores: ['.expo/**', 'expo-plugins/**'], }, baseConfig, reactConfig, diff --git a/apps/expo/index.ts b/apps/expo/index.ts index 80d3d99..5b83418 100644 --- a/apps/expo/index.ts +++ b/apps/expo/index.ts @@ -1 +1 @@ -import "expo-router/entry"; +import 'expo-router/entry'; diff --git a/apps/expo/metro.config.js b/apps/expo/metro.config.js index bc118a0..799d735 100644 --- a/apps/expo/metro.config.js +++ b/apps/expo/metro.config.js @@ -1,14 +1,14 @@ // Learn more: https://docs.expo.dev/guides/monorepos/ -const path = require("node:path"); -const { getDefaultConfig } = require("expo/metro-config"); -const { FileStore } = require("metro-cache"); -const { withNativewind } = require("nativewind/metro"); +const path = require('node:path'); +const { getDefaultConfig } = require('expo/metro-config'); +const { FileStore } = require('metro-cache'); +const { withNativewind } = require('nativewind/metro'); const config = getDefaultConfig(__dirname); config.cacheStores = [ new FileStore({ - root: path.join(__dirname, "node_modules", ".cache", "metro"), + root: path.join(__dirname, 'node_modules', '.cache', 'metro'), }), ]; diff --git a/apps/expo/postcss.config.js b/apps/expo/postcss.config.js index 2e9905f..0e1e999 100644 --- a/apps/expo/postcss.config.js +++ b/apps/expo/postcss.config.js @@ -1 +1 @@ -module.exports = require("@acme/tailwind-config/postcss-config"); +module.exports = require('@acme/tailwind-config/postcss-config'); diff --git a/apps/expo/src/app/_layout.tsx b/apps/expo/src/app/_layout.tsx index bfab22c..352c3a0 100644 --- a/apps/expo/src/app/_layout.tsx +++ b/apps/expo/src/app/_layout.tsx @@ -1,11 +1,11 @@ -import { useColorScheme } from "react-native"; -import { Stack } from "expo-router"; -import { StatusBar } from "expo-status-bar"; -import { QueryClientProvider } from "@tanstack/react-query"; +import { useColorScheme } from 'react-native'; +import { Stack } from 'expo-router'; +import { StatusBar } from 'expo-status-bar'; +import { QueryClientProvider } from '@tanstack/react-query'; -import { queryClient } from "~/utils/api"; +import { queryClient } from '~/utils/api'; -import "../styles.css"; +import '../styles.css'; // This is the main layout of the app // It wraps your pages with the providers they need @@ -20,10 +20,10 @@ export default function RootLayout() { diff --git a/apps/expo/src/app/index.tsx b/apps/expo/src/app/index.tsx index 72fb1c3..87f5c88 100644 --- a/apps/expo/src/app/index.tsx +++ b/apps/expo/src/app/index.tsx @@ -1,16 +1,16 @@ -import { useState } from "react"; -import { Pressable, Text, TextInput, View } from "react-native"; -import { SafeAreaView } from "react-native-safe-area-context"; -import { Link, Stack } from "expo-router"; -import { LegendList } from "@legendapp/list"; -import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { useState } from 'react'; +import { Pressable, Text, TextInput, View } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; +import { Link, Stack } from 'expo-router'; +import { LegendList } from '@legendapp/list'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import type { RouterOutputs } from "~/utils/api"; -import { trpc } from "~/utils/api"; -import { authClient } from "~/utils/auth"; +import type { RouterOutputs } from '~/utils/api'; +import { trpc } from '~/utils/api'; +import { authClient } from '~/utils/auth'; function PostCard(props: { - post: RouterOutputs["post"]["all"][number]; + post: RouterOutputs['post']['all'][number]; onDelete: () => void; }) { return ( @@ -19,7 +19,7 @@ function PostCard(props: { @@ -41,14 +41,14 @@ function PostCard(props: { function CreatePost() { const queryClient = useQueryClient(); - const [title, setTitle] = useState(""); - const [content, setContent] = useState(""); + const [title, setTitle] = useState(''); + const [content, setContent] = useState(''); const { mutate, error } = useMutation( trpc.post.create.mutationOptions({ async onSuccess() { - setTitle(""); - setContent(""); + setTitle(''); + setContent(''); await queryClient.invalidateQueries(trpc.post.all.queryFilter()); }, }), @@ -89,7 +89,7 @@ function CreatePost() { > Create - {error?.data?.code === "UNAUTHORIZED" && ( + {error?.data?.code === 'UNAUTHORIZED' && ( You need to be logged in to create a post @@ -104,20 +104,20 @@ function MobileAuth() { return ( <> - {session?.user.name ? `Hello, ${session.user.name}` : "Not logged in"} + {session?.user.name ? `Hello, ${session.user.name}` : 'Not logged in'} session ? authClient.signOut() : authClient.signIn.social({ - provider: "discord", - callbackURL: "/", + provider: 'discord', + callbackURL: '/', }) } className="bg-primary flex items-center rounded-sm p-2" > - {session ? "Sign Out" : "Sign In With Discord"} + {session ? 'Sign Out' : 'Sign In With Discord'} ); @@ -138,7 +138,7 @@ export default function Index() { return ( {/* Changes page title visible on the header */} - + Create T3 Turbo diff --git a/apps/expo/src/app/post/[id].tsx b/apps/expo/src/app/post/[id].tsx index 5470017..27c4119 100644 --- a/apps/expo/src/app/post/[id].tsx +++ b/apps/expo/src/app/post/[id].tsx @@ -1,8 +1,8 @@ -import { SafeAreaView, Text, View } from "react-native"; -import { Stack, useGlobalSearchParams } from "expo-router"; -import { useQuery } from "@tanstack/react-query"; +import { SafeAreaView, Text, View } from 'react-native'; +import { Stack, useGlobalSearchParams } from 'expo-router'; +import { useQuery } from '@tanstack/react-query'; -import { trpc } from "~/utils/api"; +import { trpc } from '~/utils/api'; export default function Post() { const { id } = useGlobalSearchParams<{ id: string }>(); diff --git a/apps/expo/src/styles.css b/apps/expo/src/styles.css index 759cbd9..6672a6b 100644 --- a/apps/expo/src/styles.css +++ b/apps/expo/src/styles.css @@ -1,3 +1,3 @@ -@import "tailwindcss"; -@import "nativewind/theme"; -@import "@acme/tailwind-config/theme"; +@import 'tailwindcss'; +@import 'nativewind/theme'; +@import '@acme/tailwind-config/theme'; diff --git a/apps/expo/src/utils/api.tsx b/apps/expo/src/utils/api.tsx index 308e2ee..c859951 100644 --- a/apps/expo/src/utils/api.tsx +++ b/apps/expo/src/utils/api.tsx @@ -1,12 +1,11 @@ -import { QueryClient } from "@tanstack/react-query"; -import { createTRPCClient, httpBatchLink, loggerLink } from "@trpc/client"; -import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query"; -import superjson from "superjson"; +import type { AppRouter } from '@acme/api'; +import { QueryClient } from '@tanstack/react-query'; +import { createTRPCClient, httpBatchLink, loggerLink } from '@trpc/client'; +import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query'; +import superjson from 'superjson'; -import type { AppRouter } from "@acme/api"; - -import { authClient } from "./auth"; -import { getBaseUrl } from "./base-url"; +import { authClient } from './auth'; +import { getBaseUrl } from './base-url'; export const queryClient = new QueryClient({ defaultOptions: { @@ -24,20 +23,20 @@ export const trpc = createTRPCOptionsProxy({ links: [ loggerLink({ enabled: (opts) => - process.env.NODE_ENV === "development" || - (opts.direction === "down" && opts.result instanceof Error), - colorMode: "ansi", + process.env.NODE_ENV === 'development' || + (opts.direction === 'down' && opts.result instanceof Error), + colorMode: 'ansi', }), httpBatchLink({ transformer: superjson, url: `${getBaseUrl()}/api/trpc`, headers() { const headers = new Map(); - headers.set("x-trpc-source", "expo-react"); + headers.set('x-trpc-source', 'expo-react'); const cookies = authClient.getCookie(); if (cookies) { - headers.set("Cookie", cookies); + headers.set('Cookie', cookies); } return headers; }, @@ -47,4 +46,4 @@ export const trpc = createTRPCOptionsProxy({ queryClient, }); -export type { RouterInputs, RouterOutputs } from "@acme/api"; +export type { RouterInputs, RouterOutputs } from '@acme/api'; diff --git a/apps/expo/src/utils/auth.ts b/apps/expo/src/utils/auth.ts index 7c64135..a216b59 100644 --- a/apps/expo/src/utils/auth.ts +++ b/apps/expo/src/utils/auth.ts @@ -1,15 +1,15 @@ -import * as SecureStore from "expo-secure-store"; -import { expoClient } from "@better-auth/expo/client"; -import { createAuthClient } from "better-auth/react"; +import * as SecureStore from 'expo-secure-store'; +import { expoClient } from '@better-auth/expo/client'; +import { createAuthClient } from 'better-auth/react'; -import { getBaseUrl } from "./base-url"; +import { getBaseUrl } from './base-url'; export const authClient = createAuthClient({ baseURL: getBaseUrl(), plugins: [ expoClient({ - scheme: "expo", - storagePrefix: "expo", + scheme: 'expo', + storagePrefix: 'expo', storage: SecureStore, }), ], diff --git a/apps/expo/src/utils/base-url.ts b/apps/expo/src/utils/base-url.ts index 94dfbbc..58d0697 100644 --- a/apps/expo/src/utils/base-url.ts +++ b/apps/expo/src/utils/base-url.ts @@ -1,4 +1,4 @@ -import Constants from "expo-constants"; +import Constants from 'expo-constants'; /** * Extend this function when going to production by @@ -14,12 +14,12 @@ export const getBaseUrl = () => { * baseUrl to your production API URL. */ const debuggerHost = Constants.expoConfig?.hostUri; - const localhost = debuggerHost?.split(":")[0]; + const localhost = debuggerHost?.split(':')[0]; if (!localhost) { // return "https://turbo.t3.gg"; throw new Error( - "Failed to get localhost. Please point to your production server.", + 'Failed to get localhost. Please point to your production server.', ); } return `http://${localhost}:3000`; diff --git a/apps/expo/src/utils/session-store.ts b/apps/expo/src/utils/session-store.ts index 8f55284..7d4964f 100644 --- a/apps/expo/src/utils/session-store.ts +++ b/apps/expo/src/utils/session-store.ts @@ -1,6 +1,6 @@ -import * as SecureStore from "expo-secure-store"; +import * as SecureStore from 'expo-secure-store'; -const key = "session_token"; +const key = 'session_token'; export const getToken = () => SecureStore.getItem(key); export const deleteToken = () => SecureStore.deleteItemAsync(key); diff --git a/apps/next/.cache/.prettiercache b/apps/next/.cache/.prettiercache new file mode 100644 index 0000000..a0d928f --- /dev/null +++ b/apps/next/.cache/.prettiercache @@ -0,0 +1 @@ +[["1","2","3","4","5","6","7","8","9","10","11"],{"key":"12","value":"13"},{"key":"14","value":"15"},{"key":"16","value":"17"},{"key":"18","value":"19"},{"key":"20","value":"21"},{"key":"22","value":"23"},{"key":"24","value":"25"},{"key":"26","value":"27"},{"key":"28","value":"29"},{"key":"30","value":"31"},{"key":"32","value":"33"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/env.ts",{"size":1676,"mtime":1768155639474,"hash":"34","data":"35"},"/home/gib/Documents/Code/convex-monorepo/apps/next/postcss.config.js",{"size":63,"mtime":1766225879000,"hash":"36","data":"37"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/favicon.ico",{"size":103027,"mtime":1766225172000,"hash":"38"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/layout.tsx",{"size":1885,"mtime":1768155639311,"hash":"39","data":"40"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/t3-icon.svg",{"size":923,"mtime":1766225172000,"hash":"41"},"/home/gib/Documents/Code/convex-monorepo/apps/next/next.config.js",{"size":2062,"mtime":1768155639139,"hash":"42","data":"43"},"/home/gib/Documents/Code/convex-monorepo/apps/next/package.json",{"size":1506,"mtime":1768154671185,"hash":"44","data":"45"},"/home/gib/Documents/Code/convex-monorepo/apps/next/tsconfig.json",{"size":297,"mtime":1766225936000,"hash":"46","data":"47"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/styles.css",{"size":596,"mtime":1768155639429,"hash":"48","data":"49"},"/home/gib/Documents/Code/convex-monorepo/apps/next/eslint.config.ts",{"size":369,"mtime":1768155639048,"hash":"50","data":"51"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/page.tsx",{"size":1169,"mtime":1768155639357,"hash":"52","data":"53"},"08dcc17ca04632a7262728b699450d5d",{"hashOfOptions":"54"},"d9fa362e836306677416d4e30dfb1528",{"hashOfOptions":"55"},"36aa513994f9883f30ff408fe777cec6","f819b8d99aba405d3975e6e5d3adf796",{"hashOfOptions":"56"},"44418c5550aee51cfdf0a321ad70ae47","1f2ba5c5e807955994fd4dfca4c709be",{"hashOfOptions":"57"},"6dba01a7cb29904291cb3c9930fc1ac3",{"hashOfOptions":"58"},"785dd21512a5bdf43635be77f6a483ae",{"hashOfOptions":"59"},"48e377494d0046d38b923af54e109529",{"hashOfOptions":"60"},"a9eecac327a9c09dd26e82c515134edc",{"hashOfOptions":"61"},"3847ea1421b6ea4079a526d7e44c946d",{"hashOfOptions":"62"},"1049592143","533286024","3492548434","1155092478","4045122132","2138361299","3590205716","4261166930","1190248983"] \ No newline at end of file diff --git a/apps/next/eslint.config.ts b/apps/next/eslint.config.ts index e0e2cbe..533512f 100644 --- a/apps/next/eslint.config.ts +++ b/apps/next/eslint.config.ts @@ -1,16 +1,15 @@ -import { defineConfig } from "eslint/config"; +import { defineConfig } from 'eslint/config'; -import { baseConfig, restrictEnvAccess } from "@gib/eslint-config/base"; -import { nextjsConfig } from "@gib/eslint-config/nextjs"; -import { reactConfig } from "@gib/eslint-config/react"; +import { baseConfig, restrictEnvAccess } from '@gib/eslint-config/base'; +import { nextjsConfig } from '@gib/eslint-config/nextjs'; +import { reactConfig } from '@gib/eslint-config/react'; export default defineConfig( { - ignores: [".next/**"], + ignores: ['.next/**'], }, baseConfig, reactConfig, nextjsConfig, restrictEnvAccess, ); - diff --git a/apps/next/next.config.js b/apps/next/next.config.js index 0beb120..28980dc 100644 --- a/apps/next/next.config.js +++ b/apps/next/next.config.js @@ -1,12 +1,11 @@ -import { env } from './src/env'; import { withSentryConfig } from '@sentry/nextjs'; +import { createJiti } from 'jiti'; import { withPlausibleProxy } from 'next-plausible'; -import { createJiti } from "jiti"; const jiti = createJiti(import.meta.url); // Import env files to validate at build time. Use jiti so we can load .ts files in here. -await jiti.import("./src/env"); +await jiti.import('./src/env'); /** @type {import("next").NextConfig} */ const config = withPlausibleProxy({ @@ -28,15 +27,10 @@ const config = withPlausibleProxy({ }, }, /** Enables hot reloading for local packages without a build step */ - transpilePackages: [ - "@gib/backend", - "@gib/ui", - ], + transpilePackages: ['@gib/backend', '@gib/ui'], typescript: { ignoreBuildErrors: true }, }); - - const sentryConfig = { // For all available options, see: // https://www.npmjs.com/package/@sentry/webpack-plugin#options diff --git a/apps/next/package.json b/apps/next/package.json index fa4d61b..998f42d 100644 --- a/apps/next/package.json +++ b/apps/next/package.json @@ -1,5 +1,5 @@ { - "name": "@gib/nextjs", + "name": "@gib/next", "version": "0.1.0", "type": "module", "private": true, diff --git a/apps/next/src/app/_components/auth-showcase.tsx b/apps/next/src/app/_components/auth-showcase.tsx deleted file mode 100644 index 685a3f2..0000000 --- a/apps/next/src/app/_components/auth-showcase.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { headers } from "next/headers"; -import { redirect } from "next/navigation"; - -import { Button } from "@acme/ui/button"; - -import { auth, getSession } from "~/auth/server"; - -export async function AuthShowcase() { - const session = await getSession(); - - if (!session) { - return ( -
- -
- ); - } - - return ( -
-

- Logged in as {session.user.name} -

- -
- -
-
- ); -} diff --git a/apps/next/src/app/_components/posts.tsx b/apps/next/src/app/_components/posts.tsx deleted file mode 100644 index 5a4bbeb..0000000 --- a/apps/next/src/app/_components/posts.tsx +++ /dev/null @@ -1,210 +0,0 @@ -"use client"; - -import { useForm } from "@tanstack/react-form"; -import { - useMutation, - useQueryClient, - useSuspenseQuery, -} from "@tanstack/react-query"; - -import type { RouterOutputs } from "@acme/api"; -import { CreatePostSchema } from "@acme/db/schema"; -import { cn } from "@acme/ui"; -import { Button } from "@acme/ui/button"; -import { - Field, - FieldContent, - FieldError, - FieldGroup, - FieldLabel, -} from "@acme/ui/field"; -import { Input } from "@acme/ui/input"; -import { toast } from "@acme/ui/toast"; - -import { useTRPC } from "~/trpc/react"; - -export function CreatePostForm() { - const trpc = useTRPC(); - - const queryClient = useQueryClient(); - const createPost = useMutation( - trpc.post.create.mutationOptions({ - onSuccess: async () => { - form.reset(); - await queryClient.invalidateQueries(trpc.post.pathFilter()); - }, - onError: (err) => { - toast.error( - err.data?.code === "UNAUTHORIZED" - ? "You must be logged in to post" - : "Failed to create post", - ); - }, - }), - ); - - const form = useForm({ - defaultValues: { - content: "", - title: "", - }, - validators: { - onSubmit: CreatePostSchema, - }, - onSubmit: (data) => createPost.mutate(data.value), - }); - - return ( -
{ - event.preventDefault(); - void form.handleSubmit(); - }} - > - - { - const isInvalid = - field.state.meta.isTouched && !field.state.meta.isValid; - return ( - - - Bug Title - - field.handleChange(e.target.value)} - aria-invalid={isInvalid} - placeholder="Title" - /> - {isInvalid && } - - ); - }} - /> - { - const isInvalid = - field.state.meta.isTouched && !field.state.meta.isValid; - return ( - - - Content - - field.handleChange(e.target.value)} - aria-invalid={isInvalid} - placeholder="Content" - /> - {isInvalid && } - - ); - }} - /> - - -
- ); -} - -export function PostList() { - const trpc = useTRPC(); - const { data: posts } = useSuspenseQuery(trpc.post.all.queryOptions()); - - if (posts.length === 0) { - return ( -
- - - - -
-

No posts yet

-
-
- ); - } - - return ( -
- {posts.map((p) => { - return ; - })} -
- ); -} - -export function PostCard(props: { - post: RouterOutputs["post"]["all"][number]; -}) { - const trpc = useTRPC(); - const queryClient = useQueryClient(); - const deletePost = useMutation( - trpc.post.delete.mutationOptions({ - onSuccess: async () => { - await queryClient.invalidateQueries(trpc.post.pathFilter()); - }, - onError: (err) => { - toast.error( - err.data?.code === "UNAUTHORIZED" - ? "You must be logged in to delete a post" - : "Failed to delete post", - ); - }, - }), - ); - - return ( -
-
-

{props.post.title}

-

{props.post.content}

-
-
- -
-
- ); -} - -export function PostCardSkeleton(props: { pulse?: boolean }) { - const { pulse = true } = props; - return ( -
-
-

-   -

-

-   -

-
-
- ); -} diff --git a/apps/next/src/app/api/auth/[...all]/route.ts b/apps/next/src/app/api/auth/[...all]/route.ts deleted file mode 100644 index 71c7ff7..0000000 --- a/apps/next/src/app/api/auth/[...all]/route.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { auth } from "~/auth/server"; - -export const GET = auth.handler; -export const POST = auth.handler; diff --git a/apps/next/src/app/api/trpc/[trpc]/route.ts b/apps/next/src/app/api/trpc/[trpc]/route.ts deleted file mode 100644 index c5548f9..0000000 --- a/apps/next/src/app/api/trpc/[trpc]/route.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { NextRequest } from "next/server"; -import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; - -import { appRouter, createTRPCContext } from "@acme/api"; - -import { auth } from "~/auth/server"; - -/** - * Configure basic CORS headers - * You should extend this to match your needs - */ -const setCorsHeaders = (res: Response) => { - res.headers.set("Access-Control-Allow-Origin", "*"); - res.headers.set("Access-Control-Request-Method", "*"); - res.headers.set("Access-Control-Allow-Methods", "OPTIONS, GET, POST"); - res.headers.set("Access-Control-Allow-Headers", "*"); -}; - -export const OPTIONS = () => { - const response = new Response(null, { - status: 204, - }); - setCorsHeaders(response); - return response; -}; - -const handler = async (req: NextRequest) => { - const response = await fetchRequestHandler({ - endpoint: "/api/trpc", - router: appRouter, - req, - createContext: () => - createTRPCContext({ - auth: auth, - headers: req.headers, - }), - onError({ error, path }) { - console.error(`>>> tRPC Error on '${path}'`, error); - }, - }); - - setCorsHeaders(response); - return response; -}; - -export { handler as GET, handler as POST }; diff --git a/apps/next/src/app/layout.tsx b/apps/next/src/app/layout.tsx index 8985f5d..872bcd4 100644 --- a/apps/next/src/app/layout.tsx +++ b/apps/next/src/app/layout.tsx @@ -1,50 +1,49 @@ -import type { Metadata, Viewport } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; +import type { Metadata, Viewport } from 'next'; +import { Geist, Geist_Mono } from 'next/font/google'; +import { cn } from '@acme/ui'; +import { ThemeProvider, ThemeToggle } from '@acme/ui/theme'; +import { Toaster } from '@acme/ui/toast'; -import { cn } from "@acme/ui"; -import { ThemeProvider, ThemeToggle } from "@acme/ui/theme"; -import { Toaster } from "@acme/ui/toast"; +import { env } from '~/env'; +import { TRPCReactProvider } from '~/trpc/react'; -import { env } from "~/env"; -import { TRPCReactProvider } from "~/trpc/react"; - -import "~/app/styles.css"; +import '~/app/styles.css'; export const metadata: Metadata = { metadataBase: new URL( - env.VERCEL_ENV === "production" - ? "https://turbo.t3.gg" - : "http://localhost:3000", + env.VERCEL_ENV === 'production' + ? 'https://turbo.t3.gg' + : 'http://localhost:3000', ), - title: "Create T3 Turbo", - description: "Simple monorepo with shared backend for web & mobile apps", + title: 'Create T3 Turbo', + description: 'Simple monorepo with shared backend for web & mobile apps', openGraph: { - title: "Create T3 Turbo", - description: "Simple monorepo with shared backend for web & mobile apps", - url: "https://create-t3-turbo.vercel.app", - siteName: "Create T3 Turbo", + title: 'Create T3 Turbo', + description: 'Simple monorepo with shared backend for web & mobile apps', + url: 'https://create-t3-turbo.vercel.app', + siteName: 'Create T3 Turbo', }, twitter: { - card: "summary_large_image", - site: "@jullerino", - creator: "@jullerino", + card: 'summary_large_image', + site: '@jullerino', + creator: '@jullerino', }, }; export const viewport: Viewport = { themeColor: [ - { media: "(prefers-color-scheme: light)", color: "white" }, - { media: "(prefers-color-scheme: dark)", color: "black" }, + { media: '(prefers-color-scheme: light)', color: 'white' }, + { media: '(prefers-color-scheme: dark)', color: 'black' }, ], }; const geistSans = Geist({ - subsets: ["latin"], - variable: "--font-geist-sans", + subsets: ['latin'], + variable: '--font-geist-sans', }); const geistMono = Geist_Mono({ - subsets: ["latin"], - variable: "--font-geist-mono", + subsets: ['latin'], + variable: '--font-geist-mono', }); export default function RootLayout(props: { children: React.ReactNode }) { @@ -52,7 +51,7 @@ export default function RootLayout(props: { children: React.ReactNode }) { =18" }, "optionalPeers": ["@types/node"] }, "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ=="], - "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], @@ -1360,9 +1359,9 @@ "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], - "@turbo/gen": ["@turbo/gen@2.5.8", "", { "dependencies": { "@turbo/workspaces": "2.5.8", "commander": "^10.0.0", "fs-extra": "^10.1.0", "inquirer": "^8.2.4", "minimatch": "^9.0.0", "node-plop": "^0.26.3", "picocolors": "1.0.1", "proxy-agent": "^6.5.0", "ts-node": "^10.9.2", "update-check": "^1.5.4", "validate-npm-package-name": "^5.0.0" }, "bin": { "gen": "dist/cli.js" } }, "sha512-PknlZnl4NzARv9p2KnRIA2q9cGWzrvv2G5moWLoZRTLspoE7jL2XtejzwbclS2iXGbXQWk27BfIugv98tS2s7w=="], + "@turbo/gen": ["@turbo/gen@2.7.3", "", { "dependencies": { "@turbo/workspaces": "2.7.3", "commander": "10.0.0", "fs-extra": "10.1.0", "inquirer": "8.2.4", "minimatch": "9.0.0", "node-plop": "0.26.3", "picocolors": "1.0.1", "proxy-agent": "6.5.0", "ts-node": "10.9.2", "update-check": "1.5.4", "validate-npm-package-name": "5.0.0" }, "bin": { "gen": "dist/cli.js" } }, "sha512-lvjv1/fwUewFqew/qdNM//6cC32EIjEAJ2rCx5blL4+BVX16ubHroEGUJRNQegW0hpglTztdJW6DdS3hIuqoCA=="], - "@turbo/workspaces": ["@turbo/workspaces@2.5.8", "", { "dependencies": { "commander": "^10.0.0", "execa": "5.1.1", "fast-glob": "^3.2.12", "fs-extra": "^10.1.0", "gradient-string": "^2.0.0", "inquirer": "^8.0.0", "js-yaml": "^4.1.0", "ora": "4.1.1", "picocolors": "1.0.1", "semver": "7.6.2", "update-check": "^1.5.4" }, "bin": { "workspaces": "dist/cli.js" } }, "sha512-EE/27azLteK24It0B0IrjA7yWFC6jYZoTTUzL7R7HgiN0BWBPrTp6Ugpn0iE6+Bn9fFcjSp/IBBG8D8c7vXD1g=="], + "@turbo/workspaces": ["@turbo/workspaces@2.7.3", "", { "dependencies": { "commander": "10.0.0", "execa": "5.1.1", "fast-glob": "3.2.12", "fs-extra": "10.1.0", "gradient-string": "2.0.1", "inquirer": "8.2.4", "js-yaml": "4.1.0", "ora": "4.1.1", "picocolors": "1.0.1", "semver": "7.6.2", "update-check": "1.5.4" }, "bin": { "workspaces": "dist/cli.js" } }, "sha512-opYsHNZo3qhGJ+qxLSEhNcnf+e8beha/bfinwUH857NFL7oYHsOpVtNJIiwcJYKjZjJO4XtxTLsvAo3CQ5/R5A=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.8.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q=="], @@ -1412,9 +1411,9 @@ "@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="], - "@types/react": ["@types/react@19.2.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA=="], + "@types/react": ["@types/react@19.1.17", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA=="], - "@types/react-dom": ["@types/react-dom@19.2.2", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw=="], + "@types/react-dom": ["@types/react-dom@19.1.11", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-3BKc/yGdNTYQVVw4idqHtSOcFsgGuBbMveKCOgF8wQ5QtrYOc3jDIlzg3jef04zcXFIHLelyGlj0T+BJ8+KN+w=="], "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="], @@ -1634,6 +1633,8 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], @@ -1656,7 +1657,7 @@ "change-case": ["change-case@3.1.0", "", { "dependencies": { "camel-case": "^3.0.0", "constant-case": "^2.0.0", "dot-case": "^2.1.0", "header-case": "^1.0.0", "is-lower-case": "^1.1.0", "is-upper-case": "^1.1.0", "lower-case": "^1.1.1", "lower-case-first": "^1.0.0", "no-case": "^2.3.2", "param-case": "^2.1.0", "pascal-case": "^2.0.0", "path-case": "^2.1.0", "sentence-case": "^2.1.0", "snake-case": "^2.1.0", "swap-case": "^1.1.0", "title-case": "^2.1.0", "upper-case": "^1.1.1", "upper-case-first": "^1.1.0" } }, "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw=="], - "chardet": ["chardet@2.1.0", "", {}, "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA=="], + "chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], @@ -1704,7 +1705,7 @@ "colorjs.io": ["colorjs.io@0.6.0-alpha.1", "", {}, "sha512-c/h/8uAmPydQcriRdX8UTAFHj6SpSHFHBA8LvMikvYWAVApPTwg/pyOXNsGmaCBd6L/EeDlRHSNhTtnIFp/qsg=="], - "commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], + "commander": ["commander@10.0.0", "", {}, "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA=="], "comment-json": ["comment-json@4.4.1", "", { "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", "esprima": "^4.0.1" } }, "sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg=="], @@ -2104,7 +2105,7 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "gradient-string": ["gradient-string@2.0.2", "", { "dependencies": { "chalk": "^4.1.2", "tinygradient": "^1.1.5" } }, "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw=="], + "gradient-string": ["gradient-string@2.0.1", "", { "dependencies": { "chalk": "^4.1.2", "tinygradient": "^1.1.5" } }, "sha512-+xDOYR2fMa4QHGysTgyQsl8g16mcAKqvvsKI014qYP2XVf1SWUPlD8KhdBJPUM8AVwDUB+ls0NFkqRzAB5URkA=="], "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], @@ -2148,7 +2149,7 @@ "hyphenate-style-name": ["hyphenate-style-name@1.1.0", "", {}, "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw=="], - "iconv-lite": ["iconv-lite@0.7.0", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ=="], + "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], @@ -2176,7 +2177,7 @@ "input-otp": ["input-otp@1.4.2", "", { "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA=="], - "inquirer": ["inquirer@8.2.7", "", { "dependencies": { "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^6.0.1" } }, "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA=="], + "inquirer": ["inquirer@8.2.4", "", { "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^7.0.0" } }, "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg=="], "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], @@ -2462,7 +2463,7 @@ "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "minimatch": ["minimatch@9.0.0", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -2692,7 +2693,7 @@ "react-devtools-core": ["react-devtools-core@6.1.5", "", { "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" } }, "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA=="], - "react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], + "react-dom": ["react-dom@19.1.4", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.4" } }, "sha512-s2868ab/xo2SI6H4106A7aFI8Mrqa4xC6HZT/pBzYyQ3cBLqa88hu47xYD8xf+uECleN698Awn7RCWlkTiKnqQ=="], "react-email": ["react-email@4.2.11", "", { "dependencies": { "@babel/parser": "^7.27.0", "@babel/traverse": "^7.27.0", "chokidar": "^4.0.3", "commander": "^13.0.0", "debounce": "^2.0.0", "esbuild": "^0.25.0", "glob": "^11.0.0", "jiti": "2.4.2", "log-symbols": "^7.0.0", "mime-types": "^3.0.0", "normalize-path": "^3.0.0", "nypm": "0.6.0", "ora": "^8.0.0", "prompts": "2.4.2", "socket.io": "^4.8.1", "tsconfig-paths": "4.2.0" }, "bin": { "email": "dist/index.js" } }, "sha512-/7TXRgsTrXcV1u7kc5ZXDVlPvZqEBaYcflMhE2FgWIJh3OHLjj2FqctFTgYcp0iwzbR59a7gzJLmSKyD0wYJEQ=="], @@ -3012,19 +3013,19 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "turbo": ["turbo@2.5.8", "", { "optionalDependencies": { "turbo-darwin-64": "2.5.8", "turbo-darwin-arm64": "2.5.8", "turbo-linux-64": "2.5.8", "turbo-linux-arm64": "2.5.8", "turbo-windows-64": "2.5.8", "turbo-windows-arm64": "2.5.8" }, "bin": { "turbo": "bin/turbo" } }, "sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w=="], + "turbo": ["turbo@2.7.3", "", { "optionalDependencies": { "turbo-darwin-64": "2.7.3", "turbo-darwin-arm64": "2.7.3", "turbo-linux-64": "2.7.3", "turbo-linux-arm64": "2.7.3", "turbo-windows-64": "2.7.3", "turbo-windows-arm64": "2.7.3" }, "bin": { "turbo": "bin/turbo" } }, "sha512-+HjKlP4OfYk+qzvWNETA3cUO5UuK6b5MSc2UJOKyvBceKucQoQGb2g7HlC2H1GHdkfKrk4YF1VPvROkhVZDDLQ=="], - "turbo-darwin-64": ["turbo-darwin-64@2.5.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-Dh5bCACiHO8rUXZLpKw+m3FiHtAp2CkanSyJre+SInEvEr5kIxjGvCK/8MFX8SFRjQuhjtvpIvYYZJB4AGCxNQ=="], + "turbo-darwin-64": ["turbo-darwin-64@2.7.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-aZHhvRiRHXbJw1EcEAq4aws1hsVVUZ9DPuSFaq9VVFAKCup7niIEwc22glxb7240yYEr1vLafdQ2U294Vcwz+w=="], - "turbo-darwin-arm64": ["turbo-darwin-arm64@2.5.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-f1H/tQC9px7+hmXn6Kx/w8Jd/FneIUnvLlcI/7RGHunxfOkKJKvsoiNzySkoHQ8uq1pJnhJ0xNGTlYM48ZaJOQ=="], + "turbo-darwin-arm64": ["turbo-darwin-arm64@2.7.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-CkVrHSq+Bnhl9sX2LQgqQYVfLTWC2gvI74C4758OmU0djfrssDKU9d4YQF0AYXXhIIRZipSXfxClQziIMD+EAg=="], - "turbo-linux-64": ["turbo-linux-64@2.5.8", "", { "os": "linux", "cpu": "x64" }, "sha512-hMyvc7w7yadBlZBGl/bnR6O+dJTx3XkTeyTTH4zEjERO6ChEs0SrN8jTFj1lueNXKIHh1SnALmy6VctKMGnWfw=="], + "turbo-linux-64": ["turbo-linux-64@2.7.3", "", { "os": "linux", "cpu": "x64" }, "sha512-GqDsCNnzzr89kMaLGpRALyigUklzgxIrSy2pHZVXyifgczvYPnLglex78Aj3T2gu+T3trPPH2iJ+pWucVOCC2Q=="], - "turbo-linux-arm64": ["turbo-linux-arm64@2.5.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-LQELGa7bAqV2f+3rTMRPnj5G/OHAe2U+0N9BwsZvfMvHSUbsQ3bBMWdSQaYNicok7wOZcHjz2TkESn1hYK6xIQ=="], + "turbo-linux-arm64": ["turbo-linux-arm64@2.7.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-NdCDTfIcIo3dWjsiaAHlxu5gW61Ed/8maah1IAF/9E3EtX0aAHNiBMbuYLZaR4vRJ7BeVkYB6xKWRtdFLZ0y3g=="], - "turbo-windows-64": ["turbo-windows-64@2.5.8", "", { "os": "win32", "cpu": "x64" }, "sha512-3YdcaW34TrN1AWwqgYL9gUqmZsMT4T7g8Y5Azz+uwwEJW+4sgcJkIi9pYFyU4ZBSjBvkfuPZkGgfStir5BBDJQ=="], + "turbo-windows-64": ["turbo-windows-64@2.7.3", "", { "os": "win32", "cpu": "x64" }, "sha512-7bVvO987daXGSJVYBoG8R4Q+csT1pKIgLJYZevXRQ0Hqw0Vv4mKme/TOjYXs9Qb1xMKh51Tb3bXKDbd8/4G08g=="], - "turbo-windows-arm64": ["turbo-windows-arm64@2.5.8", "", { "os": "win32", "cpu": "arm64" }, "sha512-eFC5XzLmgXJfnAK3UMTmVECCwuBcORrWdewoiXBnUm934DY6QN8YowC/srhNnROMpaKaqNeRpoB5FxCww3eteQ=="], + "turbo-windows-arm64": ["turbo-windows-arm64@2.7.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-nTodweTbPmkvwMu/a55XvjMsPtuyUSC+sV7f/SR57K36rB2I0YG21qNETN+00LOTUW9B3omd8XkiXJkt4kx/cw=="], "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], @@ -3100,7 +3101,7 @@ "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], - "validate-npm-package-name": ["validate-npm-package-name@5.0.1", "", {}, "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ=="], + "validate-npm-package-name": ["validate-npm-package-name@5.0.0", "", { "dependencies": { "builtins": "^5.0.0" } }, "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ=="], "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], @@ -3150,7 +3151,7 @@ "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], - "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -3216,14 +3217,14 @@ "@expo/cli/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + "@expo/cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@expo/cli/ora": ["ora@3.4.0", "", { "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg=="], "@expo/cli/resolve": ["resolve@1.22.8", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw=="], "@expo/cli/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - "@expo/cli/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "@expo/cli/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], "@expo/config/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], @@ -3246,6 +3247,8 @@ "@expo/fingerprint/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + "@expo/fingerprint/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@expo/fingerprint/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "@expo/image-utils/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -3266,6 +3269,8 @@ "@expo/metro-config/hermes-parser": ["hermes-parser@0.29.1", "", { "dependencies": { "hermes-estree": "0.29.1" } }, "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA=="], + "@expo/metro-config/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@expo/metro-config/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], "@expo/package-manager/ora": ["ora@3.4.0", "", { "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg=="], @@ -3336,6 +3341,8 @@ "@sentry/node/@sentry/core": ["@sentry/core@10.22.0", "", {}, "sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw=="], + "@sentry/node/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@sentry/node-core/@sentry/core": ["@sentry/core@10.22.0", "", {}, "sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw=="], "@sentry/opentelemetry/@sentry/core": ["@sentry/core@10.22.0", "", {}, "sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw=="], @@ -3354,7 +3361,7 @@ "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@turbo/workspaces/fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + "@turbo/workspaces/fast-glob": ["fast-glob@3.2.12", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w=="], "@turbo/workspaces/ora": ["ora@4.1.1", "", { "dependencies": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.2.0", "is-interactive": "^1.0.0", "log-symbols": "^3.0.0", "mute-stream": "0.0.8", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A=="], @@ -3368,6 +3375,8 @@ "@typescript-eslint/typescript-estree/fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], @@ -3388,14 +3397,14 @@ "better-opn/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + "builtins/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "chalk-template/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "chromium-edge-launcher/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], "clear-module/parent-module": ["parent-module@2.0.0", "", { "dependencies": { "callsites": "^3.1.0" } }, "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "compression/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], @@ -3452,10 +3461,6 @@ "expo-router/semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], - "external-editor/chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], - - "external-editor/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "fbjs/promise": ["promise@7.3.1", "", { "dependencies": { "asap": "~2.0.3" } }, "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg=="], @@ -3524,6 +3529,8 @@ "npm-package-arg/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "npm-package-arg/validate-npm-package-name": ["validate-npm-package-name@5.0.1", "", {}, "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ=="], + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "ora/cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], @@ -3654,14 +3661,20 @@ "@expo/config-plugins/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "@expo/config-plugins/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@expo/config-plugins/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "@expo/config/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "@expo/config/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@expo/config/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "@expo/devcert/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "@expo/devcert/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@expo/devcert/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "@expo/fingerprint/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], @@ -3820,6 +3833,8 @@ "expo-modules-autolinking/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "expo-modules-autolinking/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "expo-modules-autolinking/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3874,6 +3889,8 @@ "sucrase/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "sucrase/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "sucrase/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], diff --git a/docker/compose.yml b/docker/compose.yml index 5bcfecd..f1d55a4 100644 --- a/docker/compose.yml +++ b/docker/compose.yml @@ -1,5 +1,5 @@ networks: - nginx-bridge: # You need to change this line to your defined network is as well + nginx-bridge: # Change to network you plan to use external: true services: diff --git a/package.json b/package.json index 6fc370f..b891391 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "convex": "^1.28.0" }, "react19": { - "@types/react": "^19.1.12", - "@types/react-dom": "^19.1.9", - "react": "^19.1.1", - "react-dom": "19.1.1" + "@types/react": "~19.1.0", + "@types/react-dom": "~19.1.0", + "react": "^19.1.4", + "react-dom": "19.1.4" } }, "scripts": { @@ -55,10 +55,10 @@ }, "devDependencies": { "@gib/prettier-config": "workspace:", - "@turbo/gen": "^2.5.8", + "@turbo/gen": "^2.7.3", "dotenv-cli": "^10.0.0", "prettier": "catalog:", - "turbo": "^2.5.8", + "turbo": "^2.7.3", "typescript": "catalog:" }, "prettier": "@gib/prettier-config" diff --git a/packages/backend/.cache/.prettiercache b/packages/backend/.cache/.prettiercache index 2d424bf..afc6e63 100644 --- a/packages/backend/.cache/.prettiercache +++ b/packages/backend/.cache/.prettiercache @@ -1 +1 @@ -[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"],{"key":"16","value":"17"},{"key":"18","value":"19"},{"key":"20","value":"21"},{"key":"22","value":"23"},{"key":"24","value":"25"},{"key":"26","value":"27"},{"key":"28","value":"29"},{"key":"30","value":"31"},{"key":"32","value":"33"},{"key":"34","value":"35"},{"key":"36","value":"37"},{"key":"38","value":"39"},{"key":"40","value":"41"},{"key":"42","value":"43"},{"key":"44","value":"45"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/.gitignore",{"size":16,"mtime":1753933693000,"hash":"46"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/_generated/server.d.ts",{"size":5540,"mtime":1761665487097,"hash":"47","data":"48"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/auth.config.js",{"size":128,"mtime":1753933693000,"hash":"49","data":"50"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/package.json",{"size":1135,"mtime":1761665487290,"hash":"51","data":"52"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/openai.ts",{"size":2036,"mtime":1761665487195,"hash":"53","data":"54"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/README.md",{"size":2525,"mtime":1761665487249,"hash":"55","data":"56"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/_generated/api.js",{"size":414,"mtime":1753933693000,"hash":"57","data":"58"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/tsconfig.json",{"size":732,"mtime":1753933693000,"hash":"59","data":"60"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/_generated/server.js",{"size":3453,"mtime":1761665487114,"hash":"61","data":"62"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/notes.ts",{"size":1632,"mtime":1761665487164,"hash":"63","data":"64"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/env.ts",{"size":219,"mtime":1761665487285,"hash":"65","data":"66"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/_generated/dataModel.d.ts",{"size":1726,"mtime":1761665487061,"hash":"67","data":"68"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/schema.ts",{"size":267,"mtime":1753933693000,"hash":"69","data":"70"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/utils.ts",{"size":635,"mtime":1753933693000,"hash":"71","data":"72"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/backend/convex/_generated/api.d.ts",{"size":845,"mtime":1761665486984,"hash":"73","data":"74"},"175b1a771387d8b7e26145c3d04e0475","da19b68e90524b894bbf1985bcec4d72",{"hashOfOptions":"75"},"a87d36cd21882ed8968ea6138f23acd9",{"hashOfOptions":"76"},"80903421dc266560a15314b96f727e40",{"hashOfOptions":"77"},"2cf34d0dd087d9749396d5f686419f4f",{"hashOfOptions":"78"},"7beaec3443b6db9c1a6b8c1668c98992",{"hashOfOptions":"79"},"c5dea56b7ddd47516cbd4038de020e53",{"hashOfOptions":"80"},"cfa98923457caed911ec68b626ef4234",{"hashOfOptions":"81"},"4a51b371d17b0a9dcc8d3a3d16790eec",{"hashOfOptions":"82"},"99403ed881c0f3caf6c13ad183e06049",{"hashOfOptions":"83"},"d78af64438f2e86a438ce045e0910a1d",{"hashOfOptions":"84"},"1a6eccbe2f9771c5b418adc40d8532c4",{"hashOfOptions":"85"},"9b1b5b82ff06ae9856df10ae91c15946",{"hashOfOptions":"86"},"0a1b4f144561ba1da064a40a2e089f10",{"hashOfOptions":"87"},"26351eae8dc2fa74ce0e3e6f6f0d4a49",{"hashOfOptions":"88"},"2545271053","1384390439","3159514942","514606721","3861339677","511151554","2611213275","1927515469","2174687556","3247610094","3411100989","2670794290","530123092","4075214594"] \ No newline at end of file +[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"],{"key":"16","value":"17"},{"key":"18","value":"19"},{"key":"20","value":"21"},{"key":"22","value":"23"},{"key":"24","value":"25"},{"key":"26","value":"27"},{"key":"28","value":"29"},{"key":"30","value":"31"},{"key":"32","value":"33"},{"key":"34","value":"35"},{"key":"36","value":"37"},{"key":"38","value":"39"},{"key":"40","value":"41"},{"key":"42","value":"43"},{"key":"44","value":"45"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/.cache/.prettiercache",{"size":3699,"mtime":1766222924000,"hash":"46"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/dataModel.d.ts",{"size":1726,"mtime":1768155639236,"hash":"47","data":"48"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/.gitignore",{"size":16,"mtime":1766222924000,"hash":"49"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/utils.ts",{"size":635,"mtime":1768155639993,"hash":"50","data":"51"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/tsconfig.json",{"size":732,"mtime":1766222924000,"hash":"52","data":"53"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/package.json",{"size":1120,"mtime":1766223702000,"hash":"54","data":"55"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/server.js",{"size":3453,"mtime":1768155639358,"hash":"56","data":"57"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/auth.config.js",{"size":128,"mtime":1768155639410,"hash":"58","data":"59"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/notes.ts",{"size":1632,"mtime":1768155639618,"hash":"60","data":"61"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/server.d.ts",{"size":5540,"mtime":1768155639312,"hash":"62","data":"63"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/api.d.ts",{"size":845,"mtime":1768155639122,"hash":"64","data":"65"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/api.js",{"size":414,"mtime":1768155639185,"hash":"66","data":"67"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/README.md",{"size":2525,"mtime":1768155639908,"hash":"68","data":"69"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/openai.ts",{"size":2036,"mtime":1768155639718,"hash":"70","data":"71"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/schema.ts",{"size":267,"mtime":1768155639933,"hash":"72","data":"73"},"bf09c6d61dd6a010bca24cb05271176d","ce3275ccdd28673d7e9280b33792057c",{"hashOfOptions":"74"},"175b1a771387d8b7e26145c3d04e0475","6a3198db454396c63e99ee08065726bd",{"hashOfOptions":"75"},"cfa98923457caed911ec68b626ef4234",{"hashOfOptions":"76"},"355d413e63d71e7e2107534f0d82fa31",{"hashOfOptions":"77"},"a8efc7f01f2b2dcb19115187a6f5f935",{"hashOfOptions":"78"},"449225bb5e883c1319e2ade335cdf0ad",{"hashOfOptions":"79"},"4b3c533672165e2af8d66b7149f85e1b",{"hashOfOptions":"80"},"896efcfb7466854312acff830348fec5",{"hashOfOptions":"81"},"8effb22a4ee737ecaeb923db430289f9",{"hashOfOptions":"82"},"0f5f819cfc410629d8ba1209956a037c",{"hashOfOptions":"83"},"f5aa8269478f140adb4ccf0470dd1244",{"hashOfOptions":"84"},"e06978cd8943c0adfa4d2a855c8f3627",{"hashOfOptions":"85"},"0d3d6e28d2429a34e666323218320d74",{"hashOfOptions":"86"},"1690245769","3139400620","2702670119","1723032970","1018051749","1593187711","1215337372","3786452325","2623319630","3362284046","3941219177","30277581","3515117182"] \ No newline at end of file diff --git a/packages/backend/convex/README.md b/packages/backend/convex/README.md index 97f0913..311398b 100644 --- a/packages/backend/convex/README.md +++ b/packages/backend/convex/README.md @@ -7,9 +7,9 @@ A query function that takes two arguments looks like: ```ts // functions.js -import { v } from "convex/values"; +import { v } from 'convex/values'; -import { query } from "./_generated/server"; +import { query } from './_generated/server'; export const myQueryFunction = query({ // Validators for arguments. @@ -22,7 +22,7 @@ export const myQueryFunction = query({ handler: async (ctx, args) => { // Read the database as many times as you need here. // See https://docs.convex.dev/database/reading-data. - const documents = await ctx.db.query("tablename").collect(); + const documents = await ctx.db.query('tablename').collect(); // Arguments passed from the client are properties of the args object. console.log(args.first, args.second); @@ -39,7 +39,7 @@ Using this query function in a React component looks like: ```ts const data = useQuery(api.functions.myQueryFunction, { first: 10, - second: "hello", + second: 'hello', }); ``` @@ -47,9 +47,9 @@ A mutation function looks like: ```ts // functions.js -import { v } from "convex/values"; +import { v } from 'convex/values'; -import { mutation } from "./_generated/server"; +import { mutation } from './_generated/server'; export const myMutationFunction = mutation({ // Validators for arguments. @@ -64,7 +64,7 @@ export const myMutationFunction = mutation({ // Mutations can also read from the database like queries. // See https://docs.convex.dev/database/writing-data. const message = { body: args.first, author: args.second }; - const id = await ctx.db.insert("messages", message); + const id = await ctx.db.insert('messages', message); // Optionally, return a value from your mutation. return await ctx.db.get(id); @@ -78,10 +78,10 @@ Using this mutation function in a React component looks like: const mutation = useMutation(api.functions.myMutationFunction); function handleButtonPress() { // fire and forget, the most common way to use mutations - mutation({ first: "Hello!", second: "me" }); + mutation({ first: 'Hello!', second: 'me' }); // OR // use the result once the mutation has completed - mutation({ first: "Hello!", second: "me" }).then((result) => + mutation({ first: 'Hello!', second: 'me' }).then((result) => console.log(result), ); } diff --git a/packages/backend/convex/_generated/api.d.ts b/packages/backend/convex/_generated/api.d.ts index a4c23d1..b74dda9 100644 --- a/packages/backend/convex/_generated/api.d.ts +++ b/packages/backend/convex/_generated/api.d.ts @@ -12,11 +12,11 @@ import type { ApiFromModules, FilterApi, FunctionReference, -} from "convex/server"; +} from 'convex/server'; -import type * as notes from "../notes.js"; -import type * as openai from "../openai.js"; -import type * as utils from "../utils.js"; +import type * as notes from '../notes.js'; +import type * as openai from '../openai.js'; +import type * as utils from '../utils.js'; /** * A utility for referencing Convex functions in your app's API. @@ -33,9 +33,9 @@ declare const fullApi: ApiFromModules<{ }>; export declare const api: FilterApi< typeof fullApi, - FunctionReference + FunctionReference >; export declare const internal: FilterApi< typeof fullApi, - FunctionReference + FunctionReference >; diff --git a/packages/backend/convex/_generated/api.js b/packages/backend/convex/_generated/api.js index 3f9c482..2e31a22 100644 --- a/packages/backend/convex/_generated/api.js +++ b/packages/backend/convex/_generated/api.js @@ -8,7 +8,7 @@ * @module */ -import { anyApi } from "convex/server"; +import { anyApi } from 'convex/server'; /** * A utility for referencing Convex functions in your app's API. diff --git a/packages/backend/convex/_generated/dataModel.d.ts b/packages/backend/convex/_generated/dataModel.d.ts index 376247c..bebbb31 100644 --- a/packages/backend/convex/_generated/dataModel.d.ts +++ b/packages/backend/convex/_generated/dataModel.d.ts @@ -13,10 +13,10 @@ import type { DocumentByName, SystemTableNames, TableNamesInDataModel, -} from "convex/server"; -import type { GenericId } from "convex/values"; +} from 'convex/server'; +import type { GenericId } from 'convex/values'; -import schema from "../schema.js"; +import schema from '../schema.js'; /** * The names of all of your Convex tables. diff --git a/packages/backend/convex/_generated/server.d.ts b/packages/backend/convex/_generated/server.d.ts index 90e3fd1..2403186 100644 --- a/packages/backend/convex/_generated/server.d.ts +++ b/packages/backend/convex/_generated/server.d.ts @@ -18,9 +18,9 @@ import { HttpActionBuilder, MutationBuilder, QueryBuilder, -} from "convex/server"; +} from 'convex/server'; -import type { DataModel } from "./dataModel.js"; +import type { DataModel } from './dataModel.js'; /** * Define a query in this Convex app's public API. @@ -30,7 +30,7 @@ import type { DataModel } from "./dataModel.js"; * @param func - The query function. It receives a {@link QueryCtx} as its first argument. * @returns The wrapped query. Include this as an `export` to name it and make it accessible. */ -export declare const query: QueryBuilder; +export declare const query: QueryBuilder; /** * Define a query that is only accessible from other Convex functions (but not from the client). @@ -40,7 +40,7 @@ export declare const query: QueryBuilder; * @param func - The query function. It receives a {@link QueryCtx} as its first argument. * @returns The wrapped query. Include this as an `export` to name it and make it accessible. */ -export declare const internalQuery: QueryBuilder; +export declare const internalQuery: QueryBuilder; /** * Define a mutation in this Convex app's public API. @@ -50,7 +50,7 @@ export declare const internalQuery: QueryBuilder; * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument. * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible. */ -export declare const mutation: MutationBuilder; +export declare const mutation: MutationBuilder; /** * Define a mutation that is only accessible from other Convex functions (but not from the client). @@ -60,7 +60,7 @@ export declare const mutation: MutationBuilder; * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument. * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible. */ -export declare const internalMutation: MutationBuilder; +export declare const internalMutation: MutationBuilder; /** * Define an action in this Convex app's public API. @@ -73,7 +73,7 @@ export declare const internalMutation: MutationBuilder; * @param func - The action. It receives an {@link ActionCtx} as its first argument. * @returns The wrapped action. Include this as an `export` to name it and make it accessible. */ -export declare const action: ActionBuilder; +export declare const action: ActionBuilder; /** * Define an action that is only accessible from other Convex functions (but not from the client). @@ -81,7 +81,7 @@ export declare const action: ActionBuilder; * @param func - The function. It receives an {@link ActionCtx} as its first argument. * @returns The wrapped function. Include this as an `export` to name it and make it accessible. */ -export declare const internalAction: ActionBuilder; +export declare const internalAction: ActionBuilder; /** * Define an HTTP action. diff --git a/packages/backend/convex/_generated/server.js b/packages/backend/convex/_generated/server.js index 33c92f9..e81ccfd 100644 --- a/packages/backend/convex/_generated/server.js +++ b/packages/backend/convex/_generated/server.js @@ -16,7 +16,7 @@ import { internalQueryGeneric, mutationGeneric, queryGeneric, -} from "convex/server"; +} from 'convex/server'; /** * Define a query in this Convex app's public API. diff --git a/packages/backend/convex/auth.config.js b/packages/backend/convex/auth.config.js index 99b495c..16927b1 100644 --- a/packages/backend/convex/auth.config.js +++ b/packages/backend/convex/auth.config.js @@ -2,7 +2,7 @@ export default { providers: [ { domain: process.env.CLERK_ISSUER_URL, - applicationID: "convex", + applicationID: 'convex', }, ], }; diff --git a/packages/backend/convex/notes.ts b/packages/backend/convex/notes.ts index aa51a7c..0b53e2d 100644 --- a/packages/backend/convex/notes.ts +++ b/packages/backend/convex/notes.ts @@ -1,8 +1,8 @@ -import { Auth } from "convex/server"; -import { v } from "convex/values"; +import { Auth } from 'convex/server'; +import { v } from 'convex/values'; -import { internal } from "../convex/_generated/api"; -import { mutation, query } from "./_generated/server"; +import { internal } from '../convex/_generated/api'; +import { mutation, query } from './_generated/server'; export const getUserId = async (ctx: { auth: Auth }) => { return (await ctx.auth.getUserIdentity())?.subject; @@ -16,8 +16,8 @@ export const getNotes = query({ if (!userId) return null; const notes = await ctx.db - .query("notes") - .filter((q) => q.eq(q.field("userId"), userId)) + .query('notes') + .filter((q) => q.eq(q.field('userId'), userId)) .collect(); return notes; @@ -27,7 +27,7 @@ export const getNotes = query({ // Get note for a specific note export const getNote = query({ args: { - id: v.optional(v.id("notes")), + id: v.optional(v.id('notes')), }, handler: async (ctx, args) => { const { id } = args; @@ -46,8 +46,8 @@ export const createNote = mutation({ }, handler: async (ctx, { title, content, isSummary }) => { const userId = await getUserId(ctx); - if (!userId) throw new Error("User not found"); - const noteId = await ctx.db.insert("notes", { userId, title, content }); + if (!userId) throw new Error('User not found'); + const noteId = await ctx.db.insert('notes', { userId, title, content }); if (isSummary) { await ctx.scheduler.runAfter(0, internal.openai.summary, { @@ -63,7 +63,7 @@ export const createNote = mutation({ export const deleteNote = mutation({ args: { - noteId: v.id("notes"), + noteId: v.id('notes'), }, handler: async (ctx, args) => { await ctx.db.delete(args.noteId); diff --git a/packages/backend/convex/openai.ts b/packages/backend/convex/openai.ts index cefbe38..8030e5a 100644 --- a/packages/backend/convex/openai.ts +++ b/packages/backend/convex/openai.ts @@ -1,9 +1,9 @@ -import { v } from "convex/values"; -import OpenAI from "openai"; +import { v } from 'convex/values'; +import OpenAI from 'openai'; -import { internal } from "./_generated/api"; -import { internalAction, internalMutation, query } from "./_generated/server"; -import { missingEnvVariableUrl } from "./utils"; +import { internal } from './_generated/api'; +import { internalAction, internalMutation, query } from './_generated/server'; +import { missingEnvVariableUrl } from './utils'; export const openaiKeySet = query({ args: {}, @@ -14,7 +14,7 @@ export const openaiKeySet = query({ export const summary = internalAction({ args: { - id: v.id("notes"), + id: v.id('notes'), title: v.string(), content: v.string(), }, @@ -24,8 +24,8 @@ export const summary = internalAction({ const apiKey = process.env.OPENAI_API_KEY; if (!apiKey) { const error = missingEnvVariableUrl( - "OPENAI_API_KEY", - "https://platform.openai.com/account/api-keys", + 'OPENAI_API_KEY', + 'https://platform.openai.com/account/api-keys', ); console.error(error); await ctx.runMutation(internal.openai.saveSummary, { @@ -38,14 +38,14 @@ export const summary = internalAction({ const output = await openai.chat.completions.create({ messages: [ { - role: "system", + role: 'system', content: - "You are a helpful assistant designed to output JSON in this format: {summary: string}", + 'You are a helpful assistant designed to output JSON in this format: {summary: string}', }, - { role: "user", content: prompt }, + { role: 'user', content: prompt }, ], - model: "gpt-4-1106-preview", - response_format: { type: "json_object" }, + model: 'gpt-4-1106-preview', + response_format: { type: 'json_object' }, }); // Pull the message content out of the response @@ -65,7 +65,7 @@ export const summary = internalAction({ export const saveSummary = internalMutation({ args: { - id: v.id("notes"), + id: v.id('notes'), summary: v.string(), }, handler: async (ctx, { id, summary }) => { diff --git a/packages/backend/convex/schema.ts b/packages/backend/convex/schema.ts index 669c26e..271606a 100644 --- a/packages/backend/convex/schema.ts +++ b/packages/backend/convex/schema.ts @@ -1,5 +1,5 @@ -import { defineSchema, defineTable } from "convex/server"; -import { v } from "convex/values"; +import { defineSchema, defineTable } from 'convex/server'; +import { v } from 'convex/values'; export default defineSchema({ notes: defineTable({ diff --git a/packages/backend/convex/utils.ts b/packages/backend/convex/utils.ts index 24d17c2..9e809ee 100644 --- a/packages/backend/convex/utils.ts +++ b/packages/backend/convex/utils.ts @@ -11,6 +11,6 @@ export function missingEnvVariableUrl(envVarName: string, whereToGet: string) { export function deploymentName() { const url = process.env.CONVEX_CLOUD_URL; if (!url) return undefined; - const regex = new RegExp("https://(.+).convex.cloud"); + const regex = new RegExp('https://(.+).convex.cloud'); return regex.exec(url)?.[1]; } diff --git a/packages/ui/.cache/.prettiercache b/packages/ui/.cache/.prettiercache index 689ef31..0a20728 100644 --- a/packages/ui/.cache/.prettiercache +++ b/packages/ui/.cache/.prettiercache @@ -1 +1 @@ -[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45"],{"key":"46","value":"47"},{"key":"48","value":"49"},{"key":"50","value":"51"},{"key":"52","value":"53"},{"key":"54","value":"55"},{"key":"56","value":"57"},{"key":"58","value":"59"},{"key":"60","value":"61"},{"key":"62","value":"63"},{"key":"64","value":"65"},{"key":"66","value":"67"},{"key":"68","value":"69"},{"key":"70","value":"71"},{"key":"72","value":"73"},{"key":"74","value":"75"},{"key":"76","value":"77"},{"key":"78","value":"79"},{"key":"80","value":"81"},{"key":"82","value":"83"},{"key":"84","value":"85"},{"key":"86","value":"87"},{"key":"88","value":"89"},{"key":"90","value":"91"},{"key":"92","value":"93"},{"key":"94","value":"95"},{"key":"96","value":"97"},{"key":"98","value":"99"},{"key":"100","value":"101"},{"key":"102","value":"103"},{"key":"104","value":"105"},{"key":"106","value":"107"},{"key":"108","value":"109"},{"key":"110","value":"111"},{"key":"112","value":"113"},{"key":"114","value":"115"},{"key":"116","value":"117"},{"key":"118","value":"119"},{"key":"120","value":"121"},{"key":"122","value":"123"},{"key":"124","value":"125"},{"key":"126","value":"127"},{"key":"128","value":"129"},{"key":"130","value":"131"},{"key":"132","value":"133"},{"key":"134","value":"135"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/separator.tsx",{"size":706,"mtime":1761658333099,"hash":"136","data":"137"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/scroll-area.tsx",{"size":1652,"mtime":1761674665017,"hash":"138","data":"139"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/input.tsx",{"size":972,"mtime":1761658333099,"hash":"140","data":"141"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/label.tsx",{"size":618,"mtime":1761658333099,"hash":"142","data":"143"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/avatar.tsx",{"size":1106,"mtime":1761674664567,"hash":"144","data":"145"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/tabs.tsx",{"size":1979,"mtime":1761674665139,"hash":"146","data":"147"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/checkbox.tsx",{"size":1233,"mtime":1761674664724,"hash":"148","data":"149"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/drawer.tsx",{"size":4272,"mtime":1761674664758,"hash":"150","data":"151"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/status-message.tsx",{"size":1620,"mtime":1761674665103,"hash":"152","data":"153"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/.cache/.prettiercache",{"size":3120,"mtime":1761674052425,"hash":"154"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/switch.tsx",{"size":1184,"mtime":1761674665118,"hash":"155","data":"156"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/tsconfig.json",{"size":213,"mtime":1761674052424,"hash":"157","data":"158"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/components.json",{"size":308,"mtime":1761443987000,"hash":"159","data":"160"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/package.json",{"size":2866,"mtime":1761674052425,"hash":"161","data":"162"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/index.ts",{"size":358,"mtime":1761673214180,"hash":"163","data":"164"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/components.json",{"size":308,"mtime":1761674052424,"hash":"159","data":"165"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/card.tsx",{"size":2001,"mtime":1761674664709,"hash":"166","data":"167"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/form.tsx",{"size":3820,"mtime":1761674664909,"hash":"168","data":"169"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/field.tsx",{"size":6144,"mtime":1761674052424,"hash":"170","data":"171"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/pagination.tsx",{"size":2726,"mtime":1761674664998,"hash":"172","data":"173"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/separator.tsx",{"size":705,"mtime":1761674665027,"hash":"174","data":"175"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/eslint.config.ts",{"size":256,"mtime":1761674052424,"hash":"176","data":"177"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/eslint.config.ts",{"size":256,"mtime":1761443987000,"hash":"176","data":"178"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/button.tsx",{"size":2133,"mtime":1761658333099,"hash":"179","data":"180"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/dropdown-menu.tsx",{"size":8317,"mtime":1761658333099,"hash":"181","data":"182"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/theme.tsx",{"size":5136,"mtime":1761443987000,"hash":"183","data":"184"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/label.tsx",{"size":617,"mtime":1761674664981,"hash":"185","data":"186"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/tsconfig.json",{"size":213,"mtime":1761443987000,"hash":"157","data":"187"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/input-otp.tsx",{"size":2269,"mtime":1761674664947,"hash":"188","data":"189"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/progress.tsx",{"size":746,"mtime":1761674665007,"hash":"190","data":"191"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/toast.tsx",{"size":616,"mtime":1761443987000,"hash":"192","data":"193"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/based-avatar.tsx",{"size":1783,"mtime":1761674664606,"hash":"194","data":"195"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/dropdown-menu.tsx",{"size":8316,"mtime":1761674664802,"hash":"196","data":"197"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/button.tsx",{"size":2175,"mtime":1761674664685,"hash":"198","data":"199"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/input.tsx",{"size":971,"mtime":1761674664969,"hash":"200","data":"201"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/src/field.tsx",{"size":6144,"mtime":1761443987000,"hash":"170","data":"202"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/based-progress.tsx",{"size":1375,"mtime":1761674664644,"hash":"203","data":"204"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/sonner.tsx",{"size":571,"mtime":1761674665092,"hash":"205","data":"206"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/index.ts",{"size":358,"mtime":1761674664925,"hash":"207","data":"208"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/toast.tsx",{"size":616,"mtime":1761674052424,"hash":"192","data":"209"},"/home/gib/Documents/Code/monorepo/convex-monorepo/packages/ui/package.json",{"size":2866,"mtime":1761673551701,"hash":"161","data":"210"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/submit-button.tsx",{"size":1229,"mtime":1761674665112,"hash":"211","data":"212"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/table.tsx",{"size":2463,"mtime":1761674665128,"hash":"213","data":"214"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/shadcn-io/image-crop/index.tsx",{"size":8265,"mtime":1761674665081,"hash":"215","data":"216"},"/home/gib/Documents/Code/monorepo/techtracker/packages/ui/src/theme.tsx",{"size":5136,"mtime":1761674052424,"hash":"183","data":"217"},"731b649d937269f3b503aaca17934aaa",{"hashOfOptions":"218"},"273d3801b3d47a7dd4d31aa54e7645b4",{"hashOfOptions":"219"},"ec768e64b0da9f38330d2b7726c13c17",{"hashOfOptions":"220"},"e94441ac6bcb9b0570535168c392397e",{"hashOfOptions":"221"},"387654428ac345b74aa00853940a9b11",{"hashOfOptions":"222"},"a923fbff6ce24854cc1e463250408190",{"hashOfOptions":"223"},"d6694599f738f2aa5b03161cfc116124",{"hashOfOptions":"224"},"cc5fe21b6e9d947f0f76e2de63fb8ef0",{"hashOfOptions":"225"},"198320d03ec10aa170486ea3dc840691",{"hashOfOptions":"226"},"acadf0e1f17d0efc7956a80c11cdaa2d","9dea06743cb29fc72f797e5ff08abf7a",{"hashOfOptions":"227"},"a6fc50dd2d117cd2ab5544870b6eb4fb",{"hashOfOptions":"228"},"9c7797b58e9124116b585c64e6c0b829",{"hashOfOptions":"229"},"18826dc64db4eeab3e7cf31987234b12",{"hashOfOptions":"230"},"d316842b0028a3181f96441e0c96df50",{"hashOfOptions":"231"},{"hashOfOptions":"232"},"bcc428e61be66cd876aa91ab16fd6a6e",{"hashOfOptions":"233"},"5643583506d0d0304d34c0c858cf9ada",{"hashOfOptions":"234"},"a47a38dceeddc2f58e8f06c2a2c47a96",{"hashOfOptions":"235"},"23ec6ca5e03490abe988d89dd531a8e2",{"hashOfOptions":"236"},"04ec1a30bd3b2223989c683bcf349d9b",{"hashOfOptions":"237"},"420f5beb8cfa59be129b4697f434770b",{"hashOfOptions":"238"},{"hashOfOptions":"239"},"461c40f0b297acf5185ee382c9cfc1cb",{"hashOfOptions":"240"},"3bd4ec699ff17ce2b746a8c3943b47a5",{"hashOfOptions":"241"},"b62cf6fa9377430923c4b0137ae2d414",{"hashOfOptions":"242"},"cd7c04c07ef8678c7700754847833ed2",{"hashOfOptions":"243"},{"hashOfOptions":"244"},"542f873a5b0cd2d9853f01953e55cb29",{"hashOfOptions":"245"},"53c22d47b4d34e513e33b00335f97039",{"hashOfOptions":"246"},"3f99d212c8aceb0666e2a52d42f73af1",{"hashOfOptions":"247"},"5711c8ed7ef241a8cdfbe70830bb7fba",{"hashOfOptions":"248"},"1d1b440c7869a8cc678231ac9190a736",{"hashOfOptions":"249"},"56b6fdc1484e01685bd1c2131ae8da69",{"hashOfOptions":"250"},"d3f6606da7f44a46ea37d05b1b21969d",{"hashOfOptions":"251"},{"hashOfOptions":"252"},"932bc9fe6218c65ffda5c419f19242eb",{"hashOfOptions":"253"},"ace3a6465858e1f9a441724008f2d921",{"hashOfOptions":"254"},"524bc6f1a8f04cffc598190f799e96dc",{"hashOfOptions":"255"},{"hashOfOptions":"256"},{"hashOfOptions":"257"},"2c632d90ad9775d38f613c0dca696b71",{"hashOfOptions":"258"},"fc48e1886a58f146c06688b033eff1bf",{"hashOfOptions":"259"},"79347453bbcd04d3550727a9ac9a3b38",{"hashOfOptions":"260"},{"hashOfOptions":"261"},"2094140157","2888048876","671104514","1777924684","3408101102","981627891","3130371192","1161469478","2360178049","3202854857","3110581844","3986582840","3132369135","634744684","1203621759","3988801829","2026963065","2075641401","2870669263","475445700","253824749","2132860788","4287561166","2299778291","1203426049","750047251","4138459277","3819667015","918333282","3973557695","1281540968","2582142138","3247413703","3938194377","3103518834","3232583388","459794942","258258917","2945680262","3508854902","1294568070","4273303501","2957904921","175548616"] \ No newline at end of file +[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32"],{"key":"33","value":"34"},{"key":"35","value":"36"},{"key":"37","value":"38"},{"key":"39","value":"40"},{"key":"41","value":"42"},{"key":"43","value":"44"},{"key":"45","value":"46"},{"key":"47","value":"48"},{"key":"49","value":"50"},{"key":"51","value":"52"},{"key":"53","value":"54"},{"key":"55","value":"56"},{"key":"57","value":"58"},{"key":"59","value":"60"},{"key":"61","value":"62"},{"key":"63","value":"64"},{"key":"65","value":"66"},{"key":"67","value":"68"},{"key":"69","value":"70"},{"key":"71","value":"72"},{"key":"73","value":"74"},{"key":"75","value":"76"},{"key":"77","value":"78"},{"key":"79","value":"80"},{"key":"81","value":"82"},{"key":"83","value":"84"},{"key":"85","value":"86"},{"key":"87","value":"88"},{"key":"89","value":"90"},{"key":"91","value":"92"},{"key":"93","value":"94"},{"key":"95","value":"96"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/based-avatar.tsx",{"size":1783,"mtime":1768155640183,"hash":"97","data":"98"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/switch.tsx",{"size":1184,"mtime":1768155641096,"hash":"99","data":"100"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/card.tsx",{"size":2001,"mtime":1768155640347,"hash":"101","data":"102"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/table.tsx",{"size":2463,"mtime":1768155641128,"hash":"103","data":"104"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/theme.tsx",{"size":5136,"mtime":1768155641207,"hash":"105","data":"106"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/status-message.tsx",{"size":1620,"mtime":1768155641049,"hash":"107","data":"108"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/drawer.tsx",{"size":4272,"mtime":1768155640435,"hash":"109","data":"110"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/field.tsx",{"size":6143,"mtime":1768155640581,"hash":"111","data":"112"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/input-otp.tsx",{"size":2269,"mtime":1768155640716,"hash":"113","data":"114"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/separator.tsx",{"size":705,"mtime":1768155640895,"hash":"115","data":"116"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/shadcn-io/image-crop/index.tsx",{"size":8265,"mtime":1768155640999,"hash":"117","data":"118"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/avatar.tsx",{"size":1103,"mtime":1768155640108,"hash":"119","data":"120"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/checkbox.tsx",{"size":1233,"mtime":1768155640375,"hash":"121","data":"122"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/submit-button.tsx",{"size":1229,"mtime":1768155641074,"hash":"123","data":"124"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/eslint.config.ts",{"size":254,"mtime":1768155640007,"hash":"125","data":"126"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/scroll-area.tsx",{"size":1652,"mtime":1768155640872,"hash":"127","data":"128"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/toast.tsx",{"size":616,"mtime":1768155641226,"hash":"129","data":"130"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/input.tsx",{"size":971,"mtime":1768155640742,"hash":"131","data":"132"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/progress.tsx",{"size":746,"mtime":1768155640843,"hash":"133","data":"134"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/sonner.tsx",{"size":571,"mtime":1768155641017,"hash":"135","data":"136"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/components.json",{"size":334,"mtime":1768154488750,"hash":"137","data":"138"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/package.json",{"size":2863,"mtime":1768154592304,"hash":"139","data":"140"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/pagination.tsx",{"size":2726,"mtime":1768155640818,"hash":"141","data":"142"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/dropdown-menu.tsx",{"size":8316,"mtime":1768155640501,"hash":"143","data":"144"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/form.tsx",{"size":3820,"mtime":1768155640641,"hash":"145","data":"146"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/index.ts",{"size":358,"mtime":1768155640668,"hash":"147","data":"148"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/label.tsx",{"size":617,"mtime":1768155640773,"hash":"149","data":"150"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/button.tsx",{"size":2175,"mtime":1768155640302,"hash":"151","data":"152"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/tabs.tsx",{"size":1979,"mtime":1768155641150,"hash":"153","data":"154"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/.cache/.prettiercache",{"size":10630,"mtime":1766222924000,"hash":"155"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/src/based-progress.tsx",{"size":1375,"mtime":1768155640252,"hash":"156","data":"157"},"/home/gib/Documents/Code/convex-monorepo/packages/ui/tsconfig.json",{"size":212,"mtime":1766222924000,"hash":"158","data":"159"},"d69a0e5fdb3888844b71dfdee5f813dd",{"hashOfOptions":"160"},"30fdb7fe3f0f4d9cb3f17ead38ab2710",{"hashOfOptions":"161"},"fd1402a8aa6236b1eb117ada1f98bd21",{"hashOfOptions":"162"},"42967486452ac83a149ee140423a4065",{"hashOfOptions":"163"},"1f86d79c756f84b47125c6a3732aaf45",{"hashOfOptions":"164"},"dac382d2d0d08026270d9c933f9737dd",{"hashOfOptions":"165"},"c31e895d3d278760c17a87f2d33131e1",{"hashOfOptions":"166"},"1d4bbaf35debf9b198c886243d2745ed",{"hashOfOptions":"167"},"93effaa68d3ff052b89b54ced171a245",{"hashOfOptions":"168"},"f01e024d0d178647dc7204452075ce12",{"hashOfOptions":"169"},"2e23103491f72060b7b9971eb2938457",{"hashOfOptions":"170"},"1d9a1751746f365ac032bc97f9e39d43",{"hashOfOptions":"171"},"2e1fabe687ca93eb253bf88ab65a1553",{"hashOfOptions":"172"},"3ad0e3e4e3b4653b9aaf6fb7073add9a",{"hashOfOptions":"173"},"4f0c0909cf87c379b2cfc8de210e356b",{"hashOfOptions":"174"},"a9c4e791b40bab3829728e433a9737f8",{"hashOfOptions":"175"},"89e227070d3bd527069b51fcb38bf478",{"hashOfOptions":"176"},"03d3114dab331cb026cfcc942da0d4e4",{"hashOfOptions":"177"},"ff01b0e779be43df0dc536e3cd7c0722",{"hashOfOptions":"178"},"110620cc4b93a9dd62b75fe19d1996b0",{"hashOfOptions":"179"},"533014bafb3b9cbc3d1dbb8de7268bad",{"hashOfOptions":"180"},"b104854cfecde915ac60e2e237113200",{"hashOfOptions":"181"},"259c895da43e67115580315b5b01a82c",{"hashOfOptions":"182"},"7d924e3089aae53a4faaf35e9556c2ce",{"hashOfOptions":"183"},"7d6df6cca4478a4d47b978a33f565a9f",{"hashOfOptions":"184"},"b5e4fddb152ae937ac66af6267234c87",{"hashOfOptions":"185"},"8d5829c6cf524ab076d0598c6f567c27",{"hashOfOptions":"186"},"5ae3c05dee3828c34aeabac3fd8304e9",{"hashOfOptions":"187"},"e847b04c5623e9d066c5949ec6c917e8",{"hashOfOptions":"188"},"7b347163172048f2a800bbad09ed6f3d","17b0a237cedd06d700004aff79857eb0",{"hashOfOptions":"189"},"9fdf7ba4483e1150ea3944be29f4900e",{"hashOfOptions":"190"},"593095751","3976055592","1290706692","2480099922","524365","1319403232","1827761285","972618942","3592434636","1635320393","743650936","629671245","2070032983","1838800395","2060562380","3013375985","833715467","1603058254","2314953537","611737693","3085883012","565564622","4292802606","2164177983","1838826072","71323076","2657373336","442963750","2643614674","1817537851","2682208729"] \ No newline at end of file diff --git a/packages/ui/components.json b/packages/ui/components.json index ab061c4..ba99dba 100644 --- a/packages/ui/components.json +++ b/packages/ui/components.json @@ -9,6 +9,7 @@ "baseColor": "zinc", "cssVariables": true }, + "iconLibrary": "lucide", "aliases": { "utils": "@gib/ui", "components": "src/", diff --git a/packages/ui/eslint.config.ts b/packages/ui/eslint.config.ts index d9d6fe0..93f5f7a 100644 --- a/packages/ui/eslint.config.ts +++ b/packages/ui/eslint.config.ts @@ -1,11 +1,11 @@ -import { defineConfig } from "eslint/config"; +import { defineConfig } from 'eslint/config'; -import { baseConfig } from "@gib/eslint-config/base"; -import { reactConfig } from "@gib/eslint-config/react"; +import { baseConfig } from '@gib/eslint-config/base'; +import { reactConfig } from '@gib/eslint-config/react'; export default defineConfig( { - ignores: ["dist/**"], + ignores: ['dist/**'], }, baseConfig, reactConfig, diff --git a/packages/ui/package.json b/packages/ui/package.json index 47ac925..9ed7000 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -6,7 +6,7 @@ ".": "./src/index.ts", "./avatar": "./src/avatar.tsx", "./based-avatar": "./src/based-avatar.tsx", - "./based-progress": "./src/based-progress.ts", + "./based-progress": "./src/based-progress.tsx", "./button": "./src/button.tsx", "./card": "./src/card.tsx", "./checkbox": "./src/checkbox.tsx", @@ -23,7 +23,7 @@ "./scroll-area": "./src/scroll-area.tsx", "./separator": "./src/separator.tsx", "./sonner": "./src/sonner.tsx", - "./status-message": "./src/status-message.ts", + "./status-message": "./src/status-message.tsx", "./submit-button": "./src/submit-button.tsx", "./switch": "./src/switch.tsx", "./table": "./src/table.tsx", diff --git a/packages/ui/src/avatar.tsx b/packages/ui/src/avatar.tsx index f4359b8..d9aa985 100644 --- a/packages/ui/src/avatar.tsx +++ b/packages/ui/src/avatar.tsx @@ -1,8 +1,9 @@ -"use client"; +'use client'; -import * as React from "react"; -import { cn } from "@/lib/utils"; -import * as AvatarPrimitive from "@radix-ui/react-avatar"; +import * as React from 'react'; +import * as AvatarPrimitive from '@radix-ui/react-avatar'; + +import { cn } from '@gib/ui'; function Avatar({ className, @@ -12,7 +13,7 @@ function Avatar({ ); @@ -41,7 +42,7 @@ function AvatarFallback({ & { src?: string | null; fullName?: string | null; - imageProps?: Omit, "data-slot">; + imageProps?: Omit, 'data-slot'>; fallbackProps?: ComponentProps; userIconProps?: ComponentProps; }; @@ -29,7 +29,7 @@ const BasedAvatar = ({ {fullName ? ( fullName - .split(" ") + .split(' ') .map((n) => n[0]) - .join("") + .join('') .toUpperCase() ) : ( )} diff --git a/packages/ui/src/based-progress.tsx b/packages/ui/src/based-progress.tsx index 0eebbc0..a9f9c7a 100644 --- a/packages/ui/src/based-progress.tsx +++ b/packages/ui/src/based-progress.tsx @@ -1,8 +1,8 @@ -"use client"; +'use client'; -import * as React from "react"; -import { cn } from "@/lib/utils"; -import * as ProgressPrimitive from "@radix-ui/react-progress"; +import * as React from 'react'; +import { cn } from '@/lib/utils'; +import * as ProgressPrimitive from '@radix-ui/react-progress'; type BasedProgressProps = React.ComponentProps< typeof ProgressPrimitive.Root @@ -36,7 +36,7 @@ const BasedProgress = ({ svg]:px-3", - sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5", - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", - icon: "size-9", + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', }, }, defaultVariants: { - variant: "default", - size: "default", + variant: 'default', + size: 'default', }, }, ); @@ -41,11 +41,11 @@ function Button({ size, asChild = false, ...props -}: React.ComponentProps<"button"> & +}: React.ComponentProps<'button'> & VariantProps & { asChild?: boolean; }) { - const Comp = asChild ? Slot : "button"; + const Comp = asChild ? Slot : 'button'; return ( ) { +function Card({ className, ...props }: React.ComponentProps<'div'>) { return (
) { ); } -function CardHeader({ className, ...props }: React.ComponentProps<"div">) { +function CardHeader({ className, ...props }: React.ComponentProps<'div'>) { return (
) { ); } -function CardTitle({ className, ...props }: React.ComponentProps<"div">) { +function CardTitle({ className, ...props }: React.ComponentProps<'div'>) { return (
); } -function CardDescription({ className, ...props }: React.ComponentProps<"div">) { +function CardDescription({ className, ...props }: React.ComponentProps<'div'>) { return (
); } -function CardAction({ className, ...props }: React.ComponentProps<"div">) { +function CardAction({ className, ...props }: React.ComponentProps<'div'>) { return (
) { ); } -function CardContent({ className, ...props }: React.ComponentProps<"div">) { +function CardContent({ className, ...props }: React.ComponentProps<'div'>) { return (
); } -function CardFooter({ className, ...props }: React.ComponentProps<"div">) { +function CardFooter({ className, ...props }: React.ComponentProps<'div'>) { return (
); diff --git a/packages/ui/src/checkbox.tsx b/packages/ui/src/checkbox.tsx index 24c99fc..a966333 100644 --- a/packages/ui/src/checkbox.tsx +++ b/packages/ui/src/checkbox.tsx @@ -1,9 +1,9 @@ -"use client"; +'use client'; -import * as React from "react"; -import { cn } from "@/lib/utils"; -import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; -import { CheckIcon } from "lucide-react"; +import * as React from 'react'; +import { cn } from '@/lib/utils'; +import * as CheckboxPrimitive from '@radix-ui/react-checkbox'; +import { CheckIcon } from 'lucide-react'; function Checkbox({ className, @@ -13,7 +13,7 @@ function Checkbox({ ) { +function DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) { return (
) { ); } -function DrawerFooter({ className, ...props }: React.ComponentProps<"div">) { +function DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) { return (
); @@ -101,7 +101,7 @@ function DrawerTitle({ return ( ); @@ -114,7 +114,7 @@ function DrawerDescription({ return ( ); diff --git a/packages/ui/src/dropdown-menu.tsx b/packages/ui/src/dropdown-menu.tsx index c0630e2..68fbde8 100644 --- a/packages/ui/src/dropdown-menu.tsx +++ b/packages/ui/src/dropdown-menu.tsx @@ -1,9 +1,9 @@ -"use client"; +'use client'; -import * as React from "react"; -import { cn } from "@/lib/utils"; -import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; -import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"; +import * as React from 'react'; +import { cn } from '@/lib/utils'; +import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; +import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'; function DropdownMenu({ ...props @@ -41,7 +41,7 @@ function DropdownMenuContent({ data-slot="dropdown-menu-content" sideOffset={sideOffset} className={cn( - "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md", + 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md', className, )} {...props} @@ -61,11 +61,11 @@ function DropdownMenuGroup({ function DropdownMenuItem({ className, inset, - variant = "default", + variant = 'default', ...props }: React.ComponentProps & { inset?: boolean; - variant?: "default" | "destructive"; + variant?: 'default' | 'destructive'; }) { return ( ); @@ -178,12 +178,12 @@ function DropdownMenuSeparator({ function DropdownMenuShortcut({ className, ...props -}: React.ComponentProps<"span">) { +}: React.ComponentProps<'span'>) { return ( ) { +}: React.ComponentProps<'fieldset'>) { return (
[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", + 'flex flex-col gap-6', + 'has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3', className, )} {...props} @@ -27,17 +26,17 @@ export function FieldSet({ export function FieldLegend({ className, - variant = "legend", + variant = 'legend', ...props -}: React.ComponentProps<"legend"> & { variant?: "legend" | "label" }) { +}: React.ComponentProps<'legend'> & { variant?: 'legend' | 'label' }) { return ( ) { +}: React.ComponentProps<'div'>) { return (
[data-slot=field-group]]:gap-4", + 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4', className, )} {...props} @@ -62,34 +61,34 @@ export function FieldGroup({ } const fieldVariants = cva( - "group/field data-[invalid=true]:text-destructive flex w-full gap-3", + 'group/field data-[invalid=true]:text-destructive flex w-full gap-3', { variants: { orientation: { - vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"], + vertical: ['flex-col [&>*]:w-full [&>.sr-only]:w-auto'], horizontal: [ - "flex-row items-center", - "[&>[data-slot=field-label]]:flex-auto", - "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", + 'flex-row items-center', + '[&>[data-slot=field-label]]:flex-auto', + 'has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px', ], responsive: [ - "flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto", - "@md/field-group:[&>[data-slot=field-label]]:flex-auto", - "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", + 'flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto', + '@md/field-group:[&>[data-slot=field-label]]:flex-auto', + '@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px', ], }, }, defaultVariants: { - orientation: "vertical", + orientation: 'vertical', }, }, ); export function Field({ className, - orientation = "vertical", + orientation = 'vertical', ...props -}: React.ComponentProps<"div"> & VariantProps) { +}: React.ComponentProps<'div'> & VariantProps) { return (
) { +}: React.ComponentProps<'div'>) { return (
[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4", - "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10", + 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50', + 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4', + 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10', className, )} {...props} @@ -138,12 +137,12 @@ export function FieldLabel({ export function FieldTitle({ className, ...props -}: React.ComponentProps<"div">) { +}: React.ComponentProps<'div'>) { return (
) { +}: React.ComponentProps<'p'>) { return (

a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", + 'text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance', + 'last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5', + '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4', className, )} {...props} @@ -173,7 +172,7 @@ export function FieldSeparator({ children, className, ...props -}: React.ComponentProps<"div"> & { +}: React.ComponentProps<'div'> & { children?: React.ReactNode; }) { return ( @@ -181,7 +180,7 @@ export function FieldSeparator({ data-slot="field-separator" data-content={!!children} className={cn( - "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", + 'relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className, )} {...props} @@ -204,7 +203,7 @@ export function FieldError({ children, errors: maybeErrors, ...props -}: React.ComponentProps<"div"> & { +}: React.ComponentProps<'div'> & { errors?: ({ message?: string } | undefined)[]; }) { const content = useMemo(() => { @@ -240,7 +239,7 @@ export function FieldError({

{content} diff --git a/packages/ui/src/form.tsx b/packages/ui/src/form.tsx index 65447e4..802b5d0 100644 --- a/packages/ui/src/form.tsx +++ b/packages/ui/src/form.tsx @@ -1,17 +1,17 @@ -"use client"; +'use client'; -import type { ControllerProps, FieldPath, FieldValues } from "react-hook-form"; -import * as React from "react"; -import { Label } from "@/components/ui/label"; -import { cn } from "@/lib/utils"; -import * as LabelPrimitive from "@radix-ui/react-label"; -import { Slot } from "@radix-ui/react-slot"; +import type { ControllerProps, FieldPath, FieldValues } from 'react-hook-form'; +import * as React from 'react'; +import { Label } from '@/components/ui/label'; +import { cn } from '@/lib/utils'; +import * as LabelPrimitive from '@radix-ui/react-label'; +import { Slot } from '@radix-ui/react-slot'; import { Controller, FormProvider, useFormContext, useFormState, -} from "react-hook-form"; +} from 'react-hook-form'; const Form = FormProvider; @@ -47,7 +47,7 @@ const useFormField = () => { const fieldState = getFieldState(fieldContext.name, formState); if (!fieldContext) { - throw new Error("useFormField should be used within "); + throw new Error('useFormField should be used within '); } const { id } = itemContext; @@ -70,14 +70,14 @@ const FormItemContext = React.createContext( {} as FormItemContextValue, ); -function FormItem({ className, ...props }: React.ComponentProps<"div">) { +function FormItem({ className, ...props }: React.ComponentProps<'div'>) { const id = React.useId(); return (
@@ -94,7 +94,7 @@ function FormLabel({