From 2625cdf9b5e2a75d2bb44e44f1403f013a3ecfd5 Mon Sep 17 00:00:00 2001 From: Joshua Melville Date: Thu, 14 Nov 2024 14:05:15 +0200 Subject: [PATCH 01/13] setup biome --- .vscode/settings.json | 5 - apps/analytics-web/app/_actions/actions.ts | 2 - .../users/UsersTable/VerifyUserSwitch.tsx | 2 - apps/analytics-web/drizzle.config.ts | 1 - apps/analytics-web/package.json | 15 +- apps/analytics-web/scripts/migrate.ts | 1 - apps/analytics-web/scripts/seed.ts | 2 - apps/documentation/app/types.ts | 1 - .../customComponents/CodeCopyButton.tsx | 1 - apps/documentation/env.js | 1 - apps/documentation/lib/docs.tsx | 2 - apps/documentation/lib/writeSidebarJson.ts | 2 - apps/documentation/next.config.js | 6 +- apps/documentation/package.json | 15 +- apps/documentation/tsconfig.json | 1 - package.json | 11 +- packages/analytics/package.json | 12 - packages/analytics/src/index.ts | 8 - packages/analytics/src/utils.ts | 1 - packages/art/package.json | 15 +- packages/shared-consts/package.json | 15 +- packages/ui/package.json | 15 +- packages/ui/src/AlertDialog.tsx | 1 - packages/ui/src/dialog.tsx | 1 - pnpm-lock.yaml | 1826 ++--------------- tooling/eslint/base.js | 53 - tooling/eslint/nextjs.js | 9 - tooling/eslint/package.json | 42 - tooling/eslint/react.js | 24 - tooling/eslint/tsconfig.json | 8 - tooling/prettier/index.js | 20 - tooling/prettier/package.json | 23 - tooling/prettier/tsconfig.json | 8 - tooling/tailwind/package.json | 15 +- turbo.json | 5 +- 35 files changed, 194 insertions(+), 1975 deletions(-) delete mode 100644 tooling/eslint/base.js delete mode 100644 tooling/eslint/nextjs.js delete mode 100644 tooling/eslint/package.json delete mode 100644 tooling/eslint/react.js delete mode 100644 tooling/eslint/tsconfig.json delete mode 100644 tooling/prettier/index.js delete mode 100644 tooling/prettier/package.json delete mode 100644 tooling/prettier/tsconfig.json diff --git a/.vscode/settings.json b/.vscode/settings.json index ad6d6202..9df14f3a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,4 @@ { - "eslint.workingDirectories": [ - { - "mode": "auto" - } - ], "typescript.tsdk": "./node_modules/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "cSpell.enableFiletypes": [ diff --git a/apps/analytics-web/app/_actions/actions.ts b/apps/analytics-web/app/_actions/actions.ts index 37fac63e..b4b3c05b 100644 --- a/apps/analytics-web/app/_actions/actions.ts +++ b/apps/analytics-web/app/_actions/actions.ts @@ -11,7 +11,6 @@ export async function getEvents() { return events; } catch (error) { - // eslint-disable-next-line no-console console.error('Error getting events', error); return []; } @@ -29,7 +28,6 @@ export async function insertEvent(event: EventInsertType) { return { data: insertedEvent, error: null }; } catch (error) { - // eslint-disable-next-line no-console console.error('Error inserting events', error); return { data: null, error: 'Error inserting events' }; } diff --git a/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx b/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx index 8d19b4bb..ab7c22d4 100644 --- a/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx +++ b/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx @@ -24,12 +24,10 @@ export default function VerifyUserSwitch({ if (!response.ok) { setLocalVerified(!localVerified); - // eslint-disable-next-line no-console console.error('Database update failed.'); } } catch (error) { setLocalVerified; - // eslint-disable-next-line no-console console.error('Error updating database:', error); } }; diff --git a/apps/analytics-web/drizzle.config.ts b/apps/analytics-web/drizzle.config.ts index 677ca2be..30d4c6e6 100644 --- a/apps/analytics-web/drizzle.config.ts +++ b/apps/analytics-web/drizzle.config.ts @@ -8,7 +8,6 @@ export default defineConfig({ out: './drizzle', driver: 'pg', dbCredentials: { - // eslint-disable-next-line no-process-env, connectionString: process.env.POSTGRES_URL!, }, verbose: true, diff --git a/apps/analytics-web/package.json b/apps/analytics-web/package.json index 1fa08e73..ce3f8883 100644 --- a/apps/analytics-web/package.json +++ b/apps/analytics-web/package.json @@ -43,8 +43,6 @@ "zod": "^3.23.8" }, "devDependencies": { - "@codaco/eslint-config": "workspace:*", - "@codaco/prettier-config": "workspace:*", "@codaco/tailwind-config": "workspace:*", "@codaco/tsconfig": "workspace:*", "@faker-js/faker": "^8.2.0", @@ -55,22 +53,11 @@ "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.3", "drizzle-kit": "^0.28.0", - "eslint": "^8.57.1", "jsdom": "^25.0.1", "next-test-api-route-handler": "^4.0.14", - "prettier": "^3.3.3", "tailwindcss": "^3.4.1", "typescript": "^5.6.3", "vite-tsconfig-paths": "^5.1.2", "vitest": "^2.1.5" - }, - "eslintConfig": { - "root": true, - "extends": [ - "@codaco/eslint-config/base", - "@codaco/eslint-config/nextjs", - "@codaco/eslint-config/react" - ] - }, - "prettier": "@codaco/prettier-config" + } } diff --git a/apps/analytics-web/scripts/migrate.ts b/apps/analytics-web/scripts/migrate.ts index 9b2dd680..61fd5001 100644 --- a/apps/analytics-web/scripts/migrate.ts +++ b/apps/analytics-web/scripts/migrate.ts @@ -8,7 +8,6 @@ export async function runMigration() { try { await migrate(db, { migrationsFolder: './drizzle' }); } catch (error) { - // eslint-disable-next-line no-console console.error('Error running migration:', error); } } diff --git a/apps/analytics-web/scripts/seed.ts b/apps/analytics-web/scripts/seed.ts index 680de4a9..e482a9e4 100644 --- a/apps/analytics-web/scripts/seed.ts +++ b/apps/analytics-web/scripts/seed.ts @@ -12,7 +12,6 @@ for (let i = 0; i < 20; i++) { } async function seedEvents() { - // eslint-disable-next-line no-console console.info('Starting to seed events'); try { @@ -56,7 +55,6 @@ async function seedEvents() { .returning(); } } catch (error) { - // eslint-disable-next-line no-console console.error('Error seeding events', error); } diff --git a/apps/documentation/app/types.ts b/apps/documentation/app/types.ts index 1b84213e..c5a016d7 100644 --- a/apps/documentation/app/types.ts +++ b/apps/documentation/app/types.ts @@ -89,5 +89,4 @@ export const MetadataFileSchema = z.object({ export type MetadataFile = z.infer; -// eslint-disable-next-line @typescript-eslint/consistent-type-imports export type Messages = typeof import('../messages/en.json'); diff --git a/apps/documentation/components/customComponents/CodeCopyButton.tsx b/apps/documentation/components/customComponents/CodeCopyButton.tsx index e26a68c6..46dde7ce 100644 --- a/apps/documentation/components/customComponents/CodeCopyButton.tsx +++ b/apps/documentation/components/customComponents/CodeCopyButton.tsx @@ -14,7 +14,6 @@ const CodeCopyButton = ({ code }: { code: string }) => { setIsCopied(true); setTimeout(() => setIsCopied(false), 2000); // Reset state after 2 seconds } catch (error) { - // eslint-disable-next-line no-console console.error('Failed to copy to clipboard:', error); } }; diff --git a/apps/documentation/env.js b/apps/documentation/env.js index df60a79d..c2d81263 100644 --- a/apps/documentation/env.js +++ b/apps/documentation/env.js @@ -1,4 +1,3 @@ -/* eslint-disable no-process-env */ import { createEnv } from '@t3-oss/env-nextjs'; import { z } from 'zod'; diff --git a/apps/documentation/lib/docs.tsx b/apps/documentation/lib/docs.tsx index 4c782214..f0e6f998 100644 --- a/apps/documentation/lib/docs.tsx +++ b/apps/documentation/lib/docs.tsx @@ -138,7 +138,6 @@ export const getDocsForRouteSegment = ({ ) as SidebarProject; if (!sidebarData) { - // eslint-disable-next-line no-console console.log(`No sidebar data found for ${locale} and ${project}`); return []; } @@ -230,7 +229,6 @@ export async function getDocumentForPath({ const sourceFile = getSourceFile(locale, project, pathSegment); if (!sourceFile || (sourceFile && !existsSync(sourceFile))) { - // eslint-disable-next-line no-console console.log(`File not found: ${sourceFile}`); return null; } diff --git a/apps/documentation/lib/writeSidebarJson.ts b/apps/documentation/lib/writeSidebarJson.ts index 213e7bd6..5ee76d38 100644 --- a/apps/documentation/lib/writeSidebarJson.ts +++ b/apps/documentation/lib/writeSidebarJson.ts @@ -80,7 +80,6 @@ function generateSidebarData() { // If there's no locale, or the locale isn't included in the type, ignore it. if (!locale || !locales.includes(locale as Locale)) { - // eslint-disable-next-line no-console console.warn( `File ${file.name} is missing a locale or has a locale not defined in Locale. Locale is ${locale}. Skipping.`, ); @@ -117,6 +116,5 @@ try { 'utf-8', ); } catch (e) { - // eslint-disable-next-line no-console console.log('Error writing sidebar data!', e); } diff --git a/apps/documentation/next.config.js b/apps/documentation/next.config.js index acdcdb41..f67b2670 100644 --- a/apps/documentation/next.config.js +++ b/apps/documentation/next.config.js @@ -20,10 +20,10 @@ const nextConfig = { ], experimental: { fallbackNodePolyfills: false, // Turning this off will cause issues with Nodejs dependencies (such as dotenv) if they get imported into client code. - } + }, /** We already do linting and typechecking as separate tasks in CI */ - // eslint: { ignoreDuringBuilds: true }, - // typescript: { ignoreBuildErrors: true }, + eslint: { ignoreDuringBuilds: true }, + typescript: { ignoreBuildErrors: true }, }; diff --git a/apps/documentation/package.json b/apps/documentation/package.json index fc923333..ac9fc183 100644 --- a/apps/documentation/package.json +++ b/apps/documentation/package.json @@ -37,8 +37,6 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@codaco/eslint-config": "workspace:*", - "@codaco/prettier-config": "workspace:*", "@codaco/tailwind-config": "workspace:*", "@codaco/tsconfig": "workspace:*", "@microflash/rehype-figure": "^2.1.1", @@ -48,13 +46,11 @@ "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@types/unist": "^3.0.3", - "eslint": "^8.57.1", "gray-matter": "^4.0.3", "hast-util-heading-rank": "^3.0.0", "hast-util-to-string": "^3.0.1", "mdast-util-to-string": "^4.0.0", "next-sitemap": "^4.2.3", - "prettier": "^3.3.3", "rehype-highlight": "^7.0.1", "rehype-raw": "^7.0.0", "rehype-react": "^8.0.0", @@ -74,14 +70,5 @@ "vfile": "^6.0.3", "vfile-matter": "^5.0.0", "zod": "^3.23.8" - }, - "eslintConfig": { - "root": true, - "extends": [ - "@codaco/eslint-config/base", - "@codaco/eslint-config/nextjs", - "@codaco/eslint-config/react" - ] - }, - "prettier": "@codaco/prettier-config" + } } diff --git a/apps/documentation/tsconfig.json b/apps/documentation/tsconfig.json index 765f12b9..bf70c8ac 100644 --- a/apps/documentation/tsconfig.json +++ b/apps/documentation/tsconfig.json @@ -15,7 +15,6 @@ "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" }, "include": [ - ".eslintrc.cjs", "**/*.js", "**/*.jsx", "**/*.mjs", diff --git a/package.json b/package.json index 37af1d37..9ab119ac 100644 --- a/package.json +++ b/package.json @@ -6,17 +6,16 @@ "lint": "turbo run lint", "test": "turbo run test", "test:watch": "turbo run test:watch", - "format": "prettier --write \"**/*.{ts,tsx,md}\"", - "publish-packages": "turbo run build lint && changeset version && changeset publish" + "publish-packages": "turbo run build lint && changeset version && changeset publish", + "format-and-lint": "biome check .", + "format-and-lint:fix": "biome check . --write" }, "devDependencies": { + "@biomejs/biome": "^1.9.4", "@changesets/cli": "^2.27.9", - "@codaco/prettier-config": "workspace:*", - "prettier": "^3.2.5", "turbo": "^2.2.3", "typescript": "^5.6.3" }, "packageManager": "pnpm@8.15.5+sha256.4b4efa12490e5055d59b9b9fc9438b7d581a6b7af3b5675eb5c5f447cee1a589", - "name": "network-canvas-monorepo", - "prettier": "@codaco/prettier-config" + "name": "network-canvas-monorepo" } diff --git a/packages/analytics/package.json b/packages/analytics/package.json index bf9b1e96..0cf2a18d 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -10,29 +10,17 @@ "scripts": { "build": "tsup src/index.ts --format esm --dts --clean --sourcemap", "publish": "pnpm lint && pnpm build && npm publish --access public", - "lint": "eslint .", "dev": "npm run build -- --watch" }, "peerDependencies": { "next": "13 || 14 || 15" }, "devDependencies": { - "@codaco/eslint-config": "workspace:*", "@codaco/tsconfig": "workspace:*", - "eslint": "^8.57.1", - "prettier": "^3.2.5", "tsup": "^8.3.5", "typescript": "^5.4.5" }, "dependencies": { "zod": "^3.23.8" - }, - "eslintConfig": { - "root": true, - "extends": [ - "@codaco/eslint-config/base", - "@codaco/eslint-config/nextjs", - "@codaco/eslint-config/react" - ] } } diff --git a/packages/analytics/src/index.ts b/packages/analytics/src/index.ts index 18b04910..a4a9c2f6 100644 --- a/packages/analytics/src/index.ts +++ b/packages/analytics/src/index.ts @@ -94,17 +94,14 @@ export const createRouteHandler = ({ // Check if analytics is disabled if (disableAnalytics) { - // eslint-disable-next-line no-console console.info('🛑 Analytics disabled. Payload not sent.'); try { - // eslint-disable-next-line no-console console.info( 'Payload:', '\n', JSON.stringify(incomingEvent, null, 2), ); } catch (e) { - // eslint-disable-next-line no-console console.error('Error stringifying payload:', e); } @@ -118,7 +115,6 @@ export const createRouteHandler = ({ const trackableEvent = TrackableEventSchema.safeParse(incomingEvent); if (!trackableEvent.success) { - // eslint-disable-next-line no-console console.error('Invalid event:', trackableEvent.error); return NextResponse.json({ error: 'Invalid event' }, { status: 400 }); } @@ -146,7 +142,6 @@ export const createRouteHandler = ({ throw new Error(geoData.message); } } catch (e) { - // eslint-disable-next-line no-console console.error('Geolocation failed:', e); } @@ -181,7 +176,6 @@ export const createRouteHandler = ({ error = `Analytics platform returned an internal server error. Please check the platform logs.`; } - // eslint-disable-next-line no-console console.info(`⚠️ Analytics platform rejected event: ${error}`); return Response.json( { @@ -190,12 +184,10 @@ export const createRouteHandler = ({ { status: 500 }, ); } - // eslint-disable-next-line no-console console.info('🚀 Analytics event sent to platform!'); return Response.json({ message: 'Event forwarded successfully' }); } catch (e) { const error = ensureError(e); - // eslint-disable-next-line no-console console.info('🚫 Internal error with sending analytics event.'); return Response.json( diff --git a/packages/analytics/src/utils.ts b/packages/analytics/src/utils.ts index a268129f..ce77eb08 100644 --- a/packages/analytics/src/utils.ts +++ b/packages/analytics/src/utils.ts @@ -12,7 +12,6 @@ export function ensureError(value: unknown): Error { try { stringified = JSON.stringify(value); } catch (e) { - // eslint-disable-next-line no-console console.error(e); } diff --git a/packages/art/package.json b/packages/art/package.json index 1b080412..b1105843 100644 --- a/packages/art/package.json +++ b/packages/art/package.json @@ -9,8 +9,6 @@ "license": "MIT", "scripts": { "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", "typecheck": "tsc --noEmit" }, "dependencies": { @@ -18,26 +16,15 @@ "d3-interpolate-path": "^2.3.0" }, "devDependencies": { - "@codaco/eslint-config": "workspace:*", - "@codaco/prettier-config": "workspace:*", "@codaco/tailwind-config": "workspace:*", "@codaco/tsconfig": "workspace:*", "@types/d3-interpolate-path": "^2.0.3", "@types/react": "^18.2.64", - "eslint": "^8.57.1", - "prettier": "^3.3.2", "react": "18.3.1", "tailwindcss": "^3.4.4", "typescript": "^5.5.2" }, "peerDependencies": { "react": "18.3.1" - }, - "eslintConfig": { - "extends": [ - "@codaco/eslint-config/base", - "@codaco/eslint-config/react" - ] - }, - "prettier": "@codaco/prettier-config" + } } diff --git a/packages/shared-consts/package.json b/packages/shared-consts/package.json index 6dd1c6bb..4d7027d1 100644 --- a/packages/shared-consts/package.json +++ b/packages/shared-consts/package.json @@ -9,8 +9,6 @@ }, "scripts": { "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", "typecheck": "tsc --noEmit" }, "keywords": [ @@ -20,19 +18,8 @@ "author": "Complex Data Collective ", "license": "MIT", "devDependencies": { - "@codaco/eslint-config": "workspace:*", - "@codaco/prettier-config": "workspace:*", "@codaco/tsconfig": "workspace:*", "@types/node": "^20.5.2", - "eslint": "^8.57.1", - "prettier": "^3.2.5", "typescript": "^5.3.3" - }, - "eslintConfig": { - "extends": [ - "@codaco/eslint-config/base", - "@codaco/eslint-config/react" - ] - }, - "prettier": "@codaco/prettier-config" + } } diff --git a/packages/ui/package.json b/packages/ui/package.json index b757acf3..ff3a45a6 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -10,8 +10,6 @@ "scripts": { "add": "pnpm dlx shadcn-ui add", "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", "typecheck": "tsc --noEmit" }, "dependencies": { @@ -46,13 +44,9 @@ "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@codaco/eslint-config": "workspace:*", - "@codaco/prettier-config": "workspace:*", "@codaco/tailwind-config": "workspace:*", "@codaco/tsconfig": "workspace:*", "@types/react": "^18.2.64", - "eslint": "^8.57.1", - "prettier": "^3.3.2", "react": "18.3.1", "tailwindcss": "^3.4.4", "typescript": "^5.5.2", @@ -61,12 +55,5 @@ "peerDependencies": { "react": "18.3.1", "zod": "^3.23.8" - }, - "eslintConfig": { - "extends": [ - "@codaco/eslint-config/base", - "@codaco/eslint-config/react" - ] - }, - "prettier": "@codaco/prettier-config" + } } diff --git a/packages/ui/src/AlertDialog.tsx b/packages/ui/src/AlertDialog.tsx index 3a95777b..7b2d89ed 100644 --- a/packages/ui/src/AlertDialog.tsx +++ b/packages/ui/src/AlertDialog.tsx @@ -22,7 +22,6 @@ AlertDialogPortal.displayName = AlertDialogPrimitive.Portal.displayName; const AlertDialogOverlay = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef - // eslint-disable-next-line @typescript-eslint/no-unused-vars >(({ className, children, ...props }, ref) => ( , React.ComponentPropsWithoutRef - // eslint-disable-next-line @typescript-eslint/no-unused-vars >(({ className, ...props }, ref) => ( )); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a23fa24..0145936f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,12 @@ importers: .: devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 '@changesets/cli': specifier: ^2.27.9 version: 2.27.9 - '@codaco/prettier-config': - specifier: workspace:* - version: link:tooling/prettier - prettier: - specifier: ^3.2.5 - version: 3.3.3 turbo: specifier: ^2.2.3 version: 2.2.3 @@ -105,12 +102,6 @@ importers: specifier: ^3.23.8 version: 3.23.8 devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint - '@codaco/prettier-config': - specifier: workspace:* - version: link:../../tooling/prettier '@codaco/tailwind-config': specifier: workspace:* version: link:../../tooling/tailwind @@ -141,18 +132,12 @@ importers: drizzle-kit: specifier: ^0.28.0 version: 0.28.0 - eslint: - specifier: ^8.57.1 - version: 8.57.1 jsdom: specifier: ^25.0.1 version: 25.0.1 next-test-api-route-handler: specifier: ^4.0.14 version: 4.0.14(next@14.2.18) - prettier: - specifier: ^3.3.3 - version: 3.3.3 tailwindcss: specifier: ^3.4.1 version: 3.4.14 @@ -238,12 +223,6 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint - '@codaco/prettier-config': - specifier: workspace:* - version: link:../../tooling/prettier '@codaco/tailwind-config': specifier: workspace:* version: link:../../tooling/tailwind @@ -271,9 +250,6 @@ importers: '@types/unist': specifier: ^3.0.3 version: 3.0.3 - eslint: - specifier: ^8.57.1 - version: 8.57.1 gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -289,9 +265,6 @@ importers: next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@14.2.18) - prettier: - specifier: ^3.3.3 - version: 3.3.3 rehype-highlight: specifier: ^7.0.1 version: 7.0.1 @@ -359,18 +332,9 @@ importers: specifier: ^3.23.8 version: 3.23.8 devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint '@codaco/tsconfig': specifier: workspace:* version: link:../../tooling/typescript - eslint: - specifier: ^8.57.1 - version: 8.57.1 - prettier: - specifier: ^3.2.5 - version: 3.3.3 tsup: specifier: ^8.3.5 version: 8.3.5(typescript@5.6.3) @@ -387,12 +351,6 @@ importers: specifier: ^2.3.0 version: 2.3.0 devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint - '@codaco/prettier-config': - specifier: workspace:* - version: link:../../tooling/prettier '@codaco/tailwind-config': specifier: workspace:* version: link:../../tooling/tailwind @@ -405,12 +363,6 @@ importers: '@types/react': specifier: ^18.2.64 version: 18.3.12 - eslint: - specifier: ^8.57.1 - version: 8.57.1 - prettier: - specifier: ^3.3.2 - version: 3.3.3 react: specifier: 18.3.1 version: 18.3.1 @@ -423,24 +375,12 @@ importers: packages/shared-consts: devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint - '@codaco/prettier-config': - specifier: workspace:* - version: link:../../tooling/prettier '@codaco/tsconfig': specifier: workspace:* version: link:../../tooling/typescript '@types/node': specifier: ^20.5.2 version: 20.17.6 - eslint: - specifier: ^8.57.1 - version: 8.57.1 - prettier: - specifier: ^3.2.5 - version: 3.3.3 typescript: specifier: ^5.3.3 version: 5.6.3 @@ -535,12 +475,6 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.14) devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint - '@codaco/prettier-config': - specifier: workspace:* - version: link:../../tooling/prettier '@codaco/tailwind-config': specifier: workspace:* version: link:../../tooling/tailwind @@ -550,12 +484,6 @@ importers: '@types/react': specifier: ^18.2.64 version: 18.3.12 - eslint: - specifier: ^8.57.1 - version: 8.57.1 - prettier: - specifier: ^3.3.2 - version: 3.3.3 react: specifier: 18.3.1 version: 18.3.1 @@ -569,70 +497,8 @@ importers: specifier: ^3.23.8 version: 3.23.8 - tooling/eslint: - dependencies: - '@next/eslint-plugin-next': - specifier: ^14.2.18 - version: 14.2.18 - '@typescript-eslint/eslint-plugin': - specifier: ^7.0.2 - version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/parser': - specifier: ^7.0.2 - version: 7.18.0(eslint@8.57.1)(typescript@5.6.3) - eslint-config-turbo: - specifier: ^2.2.3 - version: 2.2.3(eslint@8.57.1) - eslint-plugin-import: - specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) - eslint-plugin-jsx-a11y: - specifier: ^6.10.2 - version: 6.10.2(eslint@8.57.1) - eslint-plugin-react: - specifier: ^7.37.2 - version: 7.37.2(eslint@8.57.1) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.2(eslint@8.57.1) - devDependencies: - '@codaco/prettier-config': - specifier: workspace:^0.1.0 - version: link:../prettier - '@codaco/tsconfig': - specifier: workspace:^0.1.0 - version: link:../typescript - '@types/eslint': - specifier: ^8.56.12 - version: 8.56.12 - eslint: - specifier: ^8.57.1 - version: 8.57.1 - prettier: - specifier: ^3.2.5 - version: 3.3.3 - typescript: - specifier: ^5.3.3 - version: 5.6.3 - tooling/github: {} - tooling/prettier: - dependencies: - prettier: - specifier: ^3.2.5 - version: 3.3.3 - prettier-plugin-tailwindcss: - specifier: ^0.5.11 - version: 0.5.14(prettier@3.3.3) - devDependencies: - '@codaco/tsconfig': - specifier: workspace:* - version: link:../typescript - typescript: - specifier: ^5.3.3 - version: 5.6.3 - tooling/tailwind: dependencies: postcss: @@ -645,21 +511,9 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.14) devDependencies: - '@codaco/eslint-config': - specifier: workspace:* - version: link:../eslint - '@codaco/prettier-config': - specifier: workspace:* - version: link:../prettier '@codaco/tsconfig': specifier: workspace:* version: link:../typescript - eslint: - specifier: ^8.57.1 - version: 8.57.1 - prettier: - specifier: ^3.2.5 - version: 3.3.3 typescript: specifier: ^5.3.3 version: 5.6.3 @@ -1020,6 +874,94 @@ packages: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + /@biomejs/biome@1.9.4: + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + dev: true + + /@biomejs/cli-darwin-arm64@1.9.4: + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-darwin-x64@1.9.4: + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-linux-arm64-musl@1.9.4: + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-linux-arm64@1.9.4: + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-linux-x64-musl@1.9.4: + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-linux-x64@1.9.4: + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-win32-arm64@1.9.4: + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@biomejs/cli-win32-x64@1.9.4: + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@changesets/apply-release-plan@7.0.5: resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} dependencies: @@ -2384,54 +2326,6 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.1): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - dev: false - - /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - /@eslint-community/regexpp@4.11.0: - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: false - - /@eslint-community/regexpp@4.12.1: - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.6 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - /@eslint/js@8.57.1: - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@faker-js/faker@8.4.1: resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} @@ -2508,25 +2402,6 @@ packages: react-hook-form: 7.53.2(react@18.3.1) dev: false - /@humanwhocodes/config-array@0.13.0: - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2634,12 +2509,6 @@ packages: /@next/env@14.2.18: resolution: {integrity: sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA==} - /@next/eslint-plugin-next@14.2.18: - resolution: {integrity: sha512-KyYTbZ3GQwWOjX3Vi1YcQbekyGP0gdammb7pbmmi25HBUCINzDReyrzCMOJIeZisK1Q3U6DT5Rlc4nm2/pQeXA==} - dependencies: - glob: 10.3.10 - dev: false - /@next/swc-darwin-arm64@14.2.16: resolution: {integrity: sha512-uFT34QojYkf0+nn6MEZ4gIWQ5aqGF11uIZ1HSxG+cSbj+Mg3+tYm8qXYd3dKN5jqKUm5rBVvf1PBRO/MeQ6rxw==} engines: {node: '>= 10'} @@ -3917,10 +3786,6 @@ packages: dev: true optional: true - /@rtsao/scc@1.1.0: - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - dev: false - /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -4065,13 +3930,6 @@ packages: '@types/ms': 0.7.34 dev: true - /@types/eslint@8.56.12: - resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} - dependencies: - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - dev: true - /@types/estree-jsx@1.0.5: resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: @@ -4088,14 +3946,6 @@ packages: '@types/unist': 3.0.3 dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: false - /@types/mdast@4.0.4: resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: @@ -4151,135 +4001,9 @@ packages: resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} dev: true - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.6 - eslint: 8.57.1 - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/scope-manager@7.18.0: - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - dev: false - - /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - debug: 4.3.6 - eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/types@7.18.0: - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: false - - /@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3): - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/visitor-keys@7.18.0: - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.18.0 - eslint-visitor-keys: 3.4.3 - dev: false - /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true /@upstash/redis@1.34.0: resolution: {integrity: sha512-TrXNoJLkysIl8SBc4u9bNnyoFYoILpCcFJcLyWCccb/QSUmaVKdvY0m5diZqc3btExsapcMbaw/s/wh9Sf1pJw==} @@ -4438,13 +4162,6 @@ packages: tslib: 2.8.1 dev: true - /acorn-jsx@5.3.2(acorn@8.14.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.14.0 - /acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -4456,6 +4173,7 @@ packages: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true + dev: false /agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} @@ -4466,14 +4184,6 @@ packages: - supports-color dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - /algoliasearch@5.13.0: resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==} engines: {node: '>= 14.0.0'} @@ -4546,9 +4256,6 @@ packages: sprintf-js: 1.0.3 dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /aria-hidden@1.2.4: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} @@ -4562,147 +4269,50 @@ packages: deep-equal: 2.2.3 dev: true - /aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - dev: false - /array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: false + dev: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + dev: true - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: false + /assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: false + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + /autoprefixer@10.4.20(postcss@8.4.49): + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + browserslist: 4.23.3 + caniuse-lite: 1.0.30001651 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 dev: false - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: false - - /array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: false - - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: false - - /assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - dev: true - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: false - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - - /autoprefixer@10.4.20(postcss@8.4.49): - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.23.3 - caniuse-lite: 1.0.30001651 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.4.49 - postcss-value-parser: 4.2.0 - dev: false - - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.0.0 - - /axe-core@4.10.0: - resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} - engines: {node: '>=4'} - dev: false - - /axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - dev: false + dev: true /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -4728,12 +4338,6 @@ packages: simplex-noise: 4.0.3 dev: false - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: @@ -4796,10 +4400,7 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + dev: true /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} @@ -4837,6 +4438,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -4962,9 +4564,6 @@ packages: engines: {node: '>= 10'} dev: false - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /consola@3.2.3: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} @@ -5003,14 +4602,6 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - /crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} dev: false @@ -5038,10 +4629,6 @@ packages: resolution: {integrity: sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ==} dev: false - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: false - /data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -5050,48 +4637,10 @@ packages: whatwg-url: 14.0.0 dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: false - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: false - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: false - /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: false - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: false - /debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} @@ -5113,6 +4662,7 @@ packages: optional: true dependencies: ms: 2.1.3 + dev: true /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -5153,9 +4703,6 @@ packages: which-typed-array: 1.1.15 dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -5163,6 +4710,7 @@ packages: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 + dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -5171,6 +4719,7 @@ packages: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 + dev: true /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -5208,23 +4757,11 @@ packages: engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: false - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - /dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true @@ -5263,11 +4800,6 @@ packages: tslib: 2.4.1 dev: false - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: false - /dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} @@ -5410,119 +4942,17 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: false - - /es-abstract@1.23.4: - resolution: {integrity: sha512-HR1gxH5OaiN7XH7uiWH0RLw0RcFySiSoW1ctxmD1ahTw3uGBtkmm/ng0tDU1OtYx5OK6EOL5Y6O21cDflG3Jcg==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.3 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: false - /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 + dev: true /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + dev: true /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} @@ -5538,62 +4968,10 @@ packages: stop-iteration-iterator: 1.0.0 dev: true - /es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.4 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 - dev: false - /es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - dev: false - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - dev: false - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.2 - dev: false - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: false - /esbuild-register@3.6.0(esbuild@0.19.12): resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -5772,254 +5150,19 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + dev: false /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} dev: true - /eslint-config-turbo@2.2.3(eslint@8.57.1): - resolution: {integrity: sha512-/zwNU+G2w0HszXzWILdl6/Catt86ejUG7vsFSdpnFzFAAUbbT2TxgoCFvC1fKtm6+SkQsXwkRRe9tFz0aMftpg==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - eslint: 8.57.1 - eslint-plugin-turbo: 2.2.3(eslint@8.57.1) - dev: false - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - debug: 3.2.7 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1): - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - string.prototype.trimend: 1.0.8 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false - - /eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - dependencies: - aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.10.0 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.57.1 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 - string.prototype.includes: 2.0.1 - dev: false - - /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.57.1 - dev: false - - /eslint-plugin-react@7.37.2(eslint@8.57.1): - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.0 - eslint: 8.57.1 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - string.prototype.repeat: 1.0.0 - dev: false - - /eslint-plugin-turbo@2.2.3(eslint@8.57.1): - resolution: {integrity: sha512-LHt35VwxthdGVO6hQRfvmFb6ee8/exAzAYWCy4o87Bnp7urltP8qg7xMd4dPSLAhtfnI2xSo1WgeVaR3MeItxw==} - peerDependencies: - eslint: '>6.6.0' - dependencies: - dotenv: 16.0.3 - eslint: 8.57.1 - dev: false - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - /eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.5 - debug: 4.3.7 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 - /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - /estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} dev: true @@ -6030,10 +5173,6 @@ packages: '@types/estree': 1.0.6 dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - /expect-type@1.1.0: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} @@ -6075,9 +5214,6 @@ packages: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -6088,12 +5224,6 @@ packages: merge2: 1.4.1 micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} dependencies: @@ -6126,12 +5256,6 @@ packages: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} dev: false - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -6146,28 +5270,11 @@ packages: path-exists: 4.0.0 dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + dev: true /foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} @@ -6231,9 +5338,6 @@ packages: universalify: 0.1.2 dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -6244,18 +5348,9 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - dev: false - /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -6270,21 +5365,13 @@ packages: has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 + dev: true /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} dev: false - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: false - /get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} dependencies: @@ -6311,18 +5398,6 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - foreground-child: 3.3.0 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - dev: false - /glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -6334,35 +5409,10 @@ packages: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - dev: false - /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -6373,6 +5423,7 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: true /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -6382,13 +5433,11 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 + dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /gray-matter@4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} @@ -6408,6 +5457,7 @@ packages: /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -6416,25 +5466,30 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 + dev: true /has-proto@1.0.3: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} + dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + dev: true /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} @@ -6678,27 +5733,7 @@ packages: /ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true /inline-style-parser@0.2.2: resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} @@ -6715,6 +5750,7 @@ packages: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 + dev: true /intl-messageformat@10.7.6: resolution: {integrity: sha512-IsMU/hqyy3FJwNJ0hxDfY2heJ7MteSuFvcnCebxRp67di4Fhx1gKKE+qS0bBwUF8yXkX9SsPUhLeX/B6h5SKUA==} @@ -6756,18 +5792,13 @@ packages: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: false + dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: true /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -6781,10 +5812,12 @@ packages: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 + dev: true /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + dev: true /is-core-module@2.15.0: resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} @@ -6792,25 +5825,12 @@ packages: dependencies: hasown: 2.0.2 - /is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - dependencies: - hasown: 2.0.2 - dev: false - - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 - dev: false - /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: true /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -6825,23 +5845,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.7 - dev: false - /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: false - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -6855,26 +5862,19 @@ packages: /is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: false + dev: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -6895,22 +5895,26 @@ packages: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 + dev: true /is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} + dev: true /is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 + dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + dev: true /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} @@ -6924,23 +5928,12 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.15 - dev: false + dev: true /is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.7 - dev: false + dev: true /is-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} @@ -6948,6 +5941,7 @@ packages: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 + dev: true /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -6956,30 +5950,11 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - dev: false - - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: false - /jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: @@ -7012,12 +5987,6 @@ packages: esprima: 4.0.1 dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - /jsdom@25.0.1: resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} engines: {node: '>=18'} @@ -7059,22 +6028,6 @@ packages: engines: {node: '>=4'} hasBin: true - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: false - /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -7086,44 +6039,11 @@ packages: graceful-fs: 4.2.11 dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 - dev: false - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - dev: false - - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - dependencies: - language-subtag-registry: 0.3.23 - dev: false - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -7147,12 +6067,6 @@ packages: p-locate: 4.1.0 dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - /lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} dev: true @@ -7163,6 +6077,7 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -7734,11 +6649,6 @@ packages: mime-db: 1.52.0 dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - /minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -7747,6 +6657,7 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -7767,6 +6678,7 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -7780,9 +6692,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /negotiator@1.0.0: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} @@ -7968,11 +6877,7 @@ packages: /object-inspect@1.13.2: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} - - /object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} - engines: {node: '>= 0.4'} - dev: false + dev: true /object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -7985,6 +6890,7 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + dev: true /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} @@ -7994,69 +6900,17 @@ packages: define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: false - - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: false - - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - dev: false - - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: false + dev: true /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: false - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - /opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true dev: false - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -8080,12 +6934,6 @@ packages: p-try: 2.2.0 dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -8093,12 +6941,6 @@ packages: p-limit: 2.3.0 dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -8120,12 +6962,6 @@ packages: resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} dev: false - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: @@ -8148,10 +6984,7 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -8170,6 +7003,7 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + dev: true /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -8235,6 +7069,7 @@ packages: /possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} + dev: true /postcss-import@15.1.0(postcss@8.4.49): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -8375,76 +7210,12 @@ packages: resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} dev: false - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - /prettier-plugin-tailwindcss@0.5.14(prettier@3.3.3): - resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig-melody': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig-melody': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - dependencies: - prettier: 3.3.3 - dev: false - /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - /pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -8454,14 +7225,6 @@ packages: react-is: 17.0.2 dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - /property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} dev: true @@ -8473,6 +7236,7 @@ packages: /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -8495,10 +7259,6 @@ packages: react: 18.3.1 dev: false - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true @@ -8596,19 +7356,6 @@ packages: engines: {node: '>= 14.16.0'} dev: true - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.4 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 - dev: false - /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true @@ -8621,16 +7368,7 @@ packages: define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - - /regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - dev: false + dev: true /rehype-highlight@7.0.1: resolution: {integrity: sha512-dB/vVGFsbm7xPglqnYbg0ABg6rAuIWKycTvuXaOO27SgLoOFNoTlniTBtAxp3n5ZyMioW1a3KwiNqgjkb6Skjg==} @@ -8742,10 +7480,6 @@ packages: - supports-color dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -8763,26 +7497,10 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: false - /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - /rollup@4.26.0: resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -8820,25 +7538,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: false - - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - dev: false - /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -8875,6 +7574,7 @@ packages: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true + dev: true /server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} @@ -8890,6 +7590,7 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 + dev: true /set-function-name@2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} @@ -8899,6 +7600,7 @@ packages: es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + dev: true /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} @@ -8930,6 +7632,7 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.2 + dev: true /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -8959,6 +7662,7 @@ packages: /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + dev: true /snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -9058,67 +7762,6 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.4 - dev: false - - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - dev: false - - /string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - dev: false - - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: false - - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: false - - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: false - /stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: @@ -9146,10 +7789,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + dev: true /style-to-js@1.1.8: resolution: {integrity: sha512-bPSspCXkkhETLXnEgDbaoWRWyv3lF2bj32YIc8IElok2IIMHUlZtQUrxYmAkKUNxpluhH0qnKWrmuoXUyTY12g==} @@ -9210,6 +7850,7 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -9275,9 +7916,6 @@ packages: engines: {node: '>=8'} dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -9390,15 +8028,6 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: true - /ts-api-utils@1.3.0(typescript@5.6.3): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.6.3 - dev: false - /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -9415,15 +8044,6 @@ packages: typescript: 5.6.3 dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: false - /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: false @@ -9545,79 +8165,16 @@ packages: turbo-windows-arm64: 2.2.3 dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: false - - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: false - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: false - - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - dev: false - /typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: false - /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -9696,11 +8253,6 @@ packages: escalade: 3.1.2 picocolors: 1.1.1 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - /urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} dev: true @@ -10005,24 +8557,7 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - - /which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - dev: false + dev: true /which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} @@ -10032,6 +8567,7 @@ packages: is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.3 + dev: true /which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} @@ -10042,6 +8578,7 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 + dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -10066,10 +8603,6 @@ packages: stackback: 0.0.2 dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -10086,9 +8619,6 @@ packages: string-width: 5.1.2 strip-ansi: 7.1.0 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -10143,10 +8673,6 @@ packages: hasBin: true dev: true - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - /zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} diff --git a/tooling/eslint/base.js b/tooling/eslint/base.js deleted file mode 100644 index 48978697..00000000 --- a/tooling/eslint/base.js +++ /dev/null @@ -1,53 +0,0 @@ -/** @type {import("eslint").Linter.Config} */ -const config = { - extends: [ - "turbo", - "eslint:recommended", - "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked", - ], - env: { - es2022: true, - node: true, - }, - parser: "@typescript-eslint/parser", - parserOptions: { project: true }, - plugins: ["@typescript-eslint", "import"], - rules: { - "import/no-anonymous-default-export": "off", - "@typescript-eslint/consistent-type-definitions": ['error', 'type'], - 'no-process-env': 'error', - 'no-console': 'error', - '@typescript-eslint/consistent-type-imports': [ - 'warn', - { - prefer: 'type-imports', - fixStyle: 'inline-type-imports', - }, - ], - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - argsIgnorePattern: '^_', - }, - ], - "@typescript-eslint/no-misused-promises": [ - "error", - { - "checksVoidReturn": false - } - ], - 'no-unreachable': 'error', - }, - ignorePatterns: [ - "**/*.config.js", - "**/*.config.cjs", - "**/.eslintrc.cjs", - ".next", - "dist", - "pnpm-lock.yaml", - ], - reportUnusedDisableDirectives: true, -}; - -module.exports = config; diff --git a/tooling/eslint/nextjs.js b/tooling/eslint/nextjs.js deleted file mode 100644 index 13643937..00000000 --- a/tooling/eslint/nextjs.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -const config = { - extends: ["plugin:@next/next/core-web-vitals"], - rules: { - "@next/next/no-img-element": "off", - }, -}; - -module.exports = config; diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json deleted file mode 100644 index c2847980..00000000 --- a/tooling/eslint/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@codaco/eslint-config", - "version": "0.2.0", - "private": true, - "license": "MIT", - "files": [ - "./base.js", - "./nextjs.js", - "./react.js" - ], - "scripts": { - "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@next/eslint-plugin-next": "^14.2.18", - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", - "eslint-config-turbo": "^2.2.3", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^4.6.0" - }, - "devDependencies": { - "@codaco/prettier-config": "workspace:^0.1.0", - "@codaco/tsconfig": "workspace:^0.1.0", - "@types/eslint": "^8.56.12", - "eslint": "^8.57.1", - "prettier": "^3.2.5", - "typescript": "^5.3.3" - }, - "eslintConfig": { - "root": true, - "extends": [ - "./base.js" - ] - }, - "prettier": "@codaco/prettier-config" -} diff --git a/tooling/eslint/react.js b/tooling/eslint/react.js deleted file mode 100644 index 618e1816..00000000 --- a/tooling/eslint/react.js +++ /dev/null @@ -1,24 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -const config = { - extends: [ - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:jsx-a11y/recommended", - ], - rules: { - "react/prop-types": "off", - }, - globals: { - React: "writable", - }, - settings: { - react: { - version: "detect", - }, - }, - env: { - browser: true, - }, -}; - -module.exports = config; diff --git a/tooling/eslint/tsconfig.json b/tooling/eslint/tsconfig.json deleted file mode 100644 index f67d7e2e..00000000 --- a/tooling/eslint/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@codaco/tsconfig/base.json", - "compilerOptions": { - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - }, - "include": ["."], - "exclude": ["node_modules"] -} diff --git a/tooling/prettier/index.js b/tooling/prettier/index.js deleted file mode 100644 index a8005b20..00000000 --- a/tooling/prettier/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import { fileURLToPath } from "url"; - -/** @typedef {import("prettier").Config} PrettierConfig */ -/** @typedef {import("prettier-plugin-tailwindcss").PluginOptions} TailwindConfig */ - -/** @type { PrettierConfig | TailwindConfig } */ -const config = { - plugins: [ - "prettier-plugin-tailwindcss", - ], - tailwindConfig: fileURLToPath( - new URL("../../tooling/tailwind/fresco.ts", import.meta.url), - ), - tailwindFunctions: ["cn", "cva"], - printWidth: 80, - quoteProps: 'consistent', - singleQuote: true, -}; - -export default config; diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json deleted file mode 100644 index ec3e7be6..00000000 --- a/tooling/prettier/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@codaco/prettier-config", - "private": true, - "version": "0.1.0", - "type": "module", - "exports": { - ".": "./index.js" - }, - "scripts": { - "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.5.11" - }, - "devDependencies": { - "@codaco/tsconfig": "workspace:*", - "typescript": "^5.3.3" - }, - "prettier": "@codaco/prettier-config" -} diff --git a/tooling/prettier/tsconfig.json b/tooling/prettier/tsconfig.json deleted file mode 100644 index f67d7e2e..00000000 --- a/tooling/prettier/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@codaco/tsconfig/base.json", - "compilerOptions": { - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - }, - "include": ["."], - "exclude": ["node_modules"] -} diff --git a/tooling/tailwind/package.json b/tooling/tailwind/package.json index f066b0b3..ae63ad3f 100644 --- a/tooling/tailwind/package.json +++ b/tooling/tailwind/package.json @@ -10,8 +10,6 @@ "license": "MIT", "scripts": { "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", "typecheck": "tsc --noEmit" }, "dependencies": { @@ -20,18 +18,7 @@ "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@codaco/eslint-config": "workspace:*", - "@codaco/prettier-config": "workspace:*", "@codaco/tsconfig": "workspace:*", - "eslint": "^8.57.1", - "prettier": "^3.2.5", "typescript": "^5.3.3" - }, - "eslintConfig": { - "root": true, - "extends": [ - "@codaco/eslint-config/base" - ] - }, - "prettier": "@codaco/prettier-config" + } } diff --git a/turbo.json b/turbo.json index 25dab8d8..c052fca7 100644 --- a/turbo.json +++ b/turbo.json @@ -4,6 +4,10 @@ "**/.env.*local" ], "tasks": { + "//#format-and-lint": {}, + "//#format-and-lint:fix": { + "cache": false + }, "build": { "dependsOn": [ "^build" @@ -32,7 +36,6 @@ "test:watch": { "cache": false }, - "lint": {}, "dev": { "cache": false, "persistent": true From 299ffe99f612b7e3ef99c07acaf48d6ff0ee9334 Mon Sep 17 00:00:00 2001 From: Joshua Melville Date: Thu, 14 Nov 2024 16:12:11 +0200 Subject: [PATCH 02/13] first pass fixes --- .changeset/config.json | 18 +- .gitignore | 10 +- .vscode/settings.json | 19 +- apps/analytics-web/app/_actions/actions.ts | 41 +- .../_components/analytics/AnalyticsView.tsx | 68 +-- .../analytics/EventsTable/Columns.tsx | 155 +++-- .../analytics/EventsTable/EventsTable.tsx | 110 ++-- .../EventsTable/StackTraceDialog.tsx | 15 +- .../analytics/EventsTable/TableFilter.tsx | 131 ++--- .../analytics/RegionsTable/Columns.tsx | 22 +- .../analytics/RegionsTable/RegionsTable.tsx | 12 +- .../analytics/cards/TotalAppsCard.tsx | 22 +- .../analytics/cards/TotalDataExported.tsx | 22 +- .../analytics/cards/TotalErrorsCard.tsx | 22 +- .../cards/TotalInterviewsCompletedCard.tsx | 22 +- .../cards/TotalInterviewsStartedCard.tsx | 22 +- .../cards/TotalProtocolsInstalledCard.tsx | 22 +- .../users/UserManagementDialog.tsx | 52 +- .../_components/users/UsersTable/Columns.tsx | 63 +- .../users/UsersTable/UsersTable.tsx | 28 +- .../users/UsersTable/VerifyUserSwitch.tsx | 61 +- apps/analytics-web/app/api/clerk/route.ts | 39 +- .../analytics-web/app/api/event/route.test.ts | 150 ++--- apps/analytics-web/app/api/event/route.ts | 66 +-- apps/analytics-web/app/globals.css | 79 ++- apps/analytics-web/app/layout.tsx | 34 +- apps/analytics-web/app/page.tsx | 34 +- apps/analytics-web/app/verification/page.tsx | 34 +- apps/analytics-web/components.json | 28 +- .../components/DataTable/column-header.tsx | 98 ++-- .../DataTable/data-table-pagination.tsx | 162 +++--- .../components/DataTable/data-table.tsx | 151 +++-- .../analytics-web/components/DialogButton.tsx | 65 +-- .../analytics-web/components/ExportButton.tsx | 52 +- .../components/MetadataDialog.tsx | 20 +- apps/analytics-web/components/SummaryCard.tsx | 38 +- apps/analytics-web/components/ui/badge.tsx | 45 +- apps/analytics-web/components/ui/button.tsx | 77 ++- apps/analytics-web/components/ui/card.tsx | 127 ++-- apps/analytics-web/components/ui/checkbox.tsx | 40 +- apps/analytics-web/components/ui/dialog.tsx | 145 ++--- .../components/ui/dropdown-menu.tsx | 269 ++++----- apps/analytics-web/components/ui/select.tsx | 157 +++-- apps/analytics-web/components/ui/switch.tsx | 40 +- apps/analytics-web/components/ui/table.tsx | 166 ++---- apps/analytics-web/components/ui/tabs.tsx | 68 +-- apps/analytics-web/db/db.ts | 8 +- apps/analytics-web/db/schema.ts | 45 +- apps/analytics-web/drizzle.config.ts | 20 +- .../drizzle/meta/0000_snapshot.json | 182 +++--- apps/analytics-web/drizzle/meta/_journal.json | 24 +- apps/analytics-web/middleware.ts | 32 +- apps/analytics-web/next.config.js | 14 +- apps/analytics-web/package.json | 122 ++-- apps/analytics-web/postcss.config.cjs | 8 +- apps/analytics-web/scripts/migrate.ts | 16 +- apps/analytics-web/scripts/seed.ts | 96 ++-- apps/analytics-web/tailwind.config.ts | 24 +- apps/analytics-web/tsconfig.json | 30 +- apps/analytics-web/utils/getRegionsTotals.ts | 42 +- apps/analytics-web/utils/getTotalAppsSetup.ts | 16 +- .../utils/getTotalDataExported.ts | 16 +- apps/analytics-web/utils/getTotalErrors.ts | 16 +- .../utils/getTotalInterviewsCompleted.ts | 16 +- .../utils/getTotalInterviewsStarted.ts | 16 +- .../utils/getTotalProtocolsInstalled.ts | 16 +- apps/analytics-web/utils/shadcn.ts | 6 +- apps/analytics-web/vitest.config.ts | 12 +- apps/documentation/.gitignore | 42 -- .../[locale]/[project]/[...docPath]/page.tsx | 90 +-- .../_components/InnerLanguageSwitcher.tsx | 59 +- .../app/[locale]/[project]/layout.tsx | 26 +- .../app/[locale]/[project]/page.tsx | 44 +- apps/documentation/app/[locale]/layout.tsx | 133 ++--- apps/documentation/app/[locale]/page.tsx | 12 +- apps/documentation/app/layout.tsx | 12 +- apps/documentation/app/manifest.ts | 46 +- apps/documentation/app/not-found.tsx | 100 ++-- apps/documentation/app/page.tsx | 10 +- apps/documentation/app/types.ts | 70 +-- apps/documentation/components.json | 28 +- .../components/DocSearchComponent.tsx | 244 ++++---- .../documentation/components/FancyHeading.tsx | 114 ++-- .../components/FancyParagraph.tsx | 114 ++-- apps/documentation/components/Hero.tsx | 179 +++--- apps/documentation/components/Layout.tsx | 92 +-- apps/documentation/components/Link.tsx | 41 +- .../documentation/components/MobileNavBar.tsx | 78 ++- .../components/MobileSidebarDialog.tsx | 84 ++- apps/documentation/components/PopoutBox.tsx | 82 ++- .../components/ProjectSwitcher.tsx | 147 +++-- .../components/Providers/theme-provider.tsx | 11 +- .../components/SharedNav/LogoComponent.tsx | 59 +- .../components/SharedNav/Menu.tsx | 374 ++++++------ .../components/SharedNav/SharedNav.tsx | 50 +- apps/documentation/components/Sidebar.tsx | 427 +++++++------- .../components/TableOfContents.tsx | 135 +++-- .../documentation/components/ai-assistant.tsx | 174 +++--- apps/documentation/components/article.tsx | 78 +-- .../customComponents/BestPractices.tsx | 28 +- .../customComponents/CodeCopyButton.tsx | 96 ++-- .../customComponents/ImageFullWidth.tsx | 16 +- .../customComponents/InterfaceSummary.tsx | 50 +- .../customComponents/KeyConcept.tsx | 45 +- .../components/customComponents/Pre.tsx | 22 +- .../customComponents/SummaryCard.tsx | 56 +- .../components/customComponents/TipBox.tsx | 81 ++- .../customComponents/VideoIFrame.tsx | 9 +- .../customComponents/WorkInProgress.tsx | 43 +- apps/documentation/components/ui/sheet.tsx | 167 +++--- .../desktop/advanced-topics/metadata.json | 14 +- .../desktop/getting-started/metadata.json | 14 +- .../interface-documentation/metadata.json | 14 +- .../docs/desktop/key-concepts/metadata.json | 14 +- apps/documentation/docs/desktop/metadata.json | 20 +- .../desktop/project-information/metadata.json | 20 +- .../docs/desktop/tutorials/metadata.json | 16 +- .../docs/fresco/advanced-topics/metadata.json | 12 +- .../docs/fresco/deployment/metadata.json | 14 +- apps/documentation/docs/fresco/metadata.json | 16 +- apps/documentation/env.js | 77 ++- apps/documentation/hooks/useHighlighted.ts | 44 +- apps/documentation/lib/docs.tsx | 543 ++++++++---------- apps/documentation/lib/helper_functions.ts | 250 ++++---- .../lib/highlight.js/styles/a11y-dark.css | 94 --- .../lib/highlight.js/styles/a11y-dark.min.css | 7 - .../lib/highlight.js/styles/a11y-light.css | 94 --- .../highlight.js/styles/a11y-light.min.css | 7 - .../lib/highlight.js/styles/agate.css | 127 ---- .../lib/highlight.js/styles/agate.min.css | 20 - .../lib/highlight.js/styles/an-old-hope.css | 75 --- .../highlight.js/styles/an-old-hope.min.css | 9 - .../lib/highlight.js/styles/androidstudio.css | 60 -- .../highlight.js/styles/androidstudio.min.css | 1 - .../lib/highlight.js/styles/arduino-light.css | 78 --- .../highlight.js/styles/arduino-light.min.css | 1 - .../lib/highlight.js/styles/arta.css | 66 --- .../lib/highlight.js/styles/arta.min.css | 1 - .../lib/highlight.js/styles/ascetic.css | 45 -- .../lib/highlight.js/styles/ascetic.min.css | 1 - .../styles/atom-one-dark-reasonable.css | 105 ---- .../styles/atom-one-dark-reasonable.min.css | 1 - .../lib/highlight.js/styles/atom-one-dark.css | 90 --- .../highlight.js/styles/atom-one-dark.min.css | 1 - .../highlight.js/styles/atom-one-light.css | 90 --- .../styles/atom-one-light.min.css | 1 - .../lib/highlight.js/styles/base16/3024.css | 163 ------ .../highlight.js/styles/base16/3024.min.css | 7 - .../lib/highlight.js/styles/base16/apathy.css | 163 ------ .../highlight.js/styles/base16/apathy.min.css | 7 - .../highlight.js/styles/base16/apprentice.css | 163 ------ .../styles/base16/apprentice.min.css | 7 - .../lib/highlight.js/styles/base16/ashes.css | 163 ------ .../highlight.js/styles/base16/ashes.min.css | 7 - .../styles/base16/atelier-cave-light.css | 163 ------ .../styles/base16/atelier-cave-light.min.css | 7 - .../styles/base16/atelier-cave.css | 163 ------ .../styles/base16/atelier-cave.min.css | 7 - .../styles/base16/atelier-dune-light.css | 163 ------ .../styles/base16/atelier-dune-light.min.css | 7 - .../styles/base16/atelier-dune.css | 163 ------ .../styles/base16/atelier-dune.min.css | 7 - .../styles/base16/atelier-estuary-light.css | 163 ------ .../base16/atelier-estuary-light.min.css | 7 - .../styles/base16/atelier-estuary.css | 163 ------ .../styles/base16/atelier-estuary.min.css | 7 - .../styles/base16/atelier-forest-light.css | 163 ------ .../base16/atelier-forest-light.min.css | 7 - .../styles/base16/atelier-forest.css | 163 ------ .../styles/base16/atelier-forest.min.css | 7 - .../styles/base16/atelier-heath-light.css | 163 ------ .../styles/base16/atelier-heath-light.min.css | 7 - .../styles/base16/atelier-heath.css | 163 ------ .../styles/base16/atelier-heath.min.css | 7 - .../styles/base16/atelier-lakeside-light.css | 163 ------ .../base16/atelier-lakeside-light.min.css | 7 - .../styles/base16/atelier-lakeside.css | 163 ------ .../styles/base16/atelier-lakeside.min.css | 7 - .../styles/base16/atelier-plateau-light.css | 163 ------ .../base16/atelier-plateau-light.min.css | 7 - .../styles/base16/atelier-plateau.css | 163 ------ .../styles/base16/atelier-plateau.min.css | 7 - .../styles/base16/atelier-savanna-light.css | 163 ------ .../base16/atelier-savanna-light.min.css | 7 - .../styles/base16/atelier-savanna.css | 163 ------ .../styles/base16/atelier-savanna.min.css | 7 - .../styles/base16/atelier-seaside-light.css | 163 ------ .../base16/atelier-seaside-light.min.css | 7 - .../styles/base16/atelier-seaside.css | 163 ------ .../styles/base16/atelier-seaside.min.css | 7 - .../base16/atelier-sulphurpool-light.css | 163 ------ .../base16/atelier-sulphurpool-light.min.css | 7 - .../styles/base16/atelier-sulphurpool.css | 163 ------ .../styles/base16/atelier-sulphurpool.min.css | 7 - .../lib/highlight.js/styles/base16/atlas.css | 163 ------ .../highlight.js/styles/base16/atlas.min.css | 7 - .../lib/highlight.js/styles/base16/bespin.css | 163 ------ .../highlight.js/styles/base16/bespin.min.css | 7 - .../styles/base16/black-metal-bathory.css | 163 ------ .../styles/base16/black-metal-bathory.min.css | 7 - .../styles/base16/black-metal-burzum.css | 163 ------ .../styles/base16/black-metal-burzum.min.css | 7 - .../base16/black-metal-dark-funeral.css | 163 ------ .../base16/black-metal-dark-funeral.min.css | 7 - .../styles/base16/black-metal-gorgoroth.css | 163 ------ .../base16/black-metal-gorgoroth.min.css | 7 - .../styles/base16/black-metal-immortal.css | 163 ------ .../base16/black-metal-immortal.min.css | 7 - .../styles/base16/black-metal-khold.css | 163 ------ .../styles/base16/black-metal-khold.min.css | 7 - .../styles/base16/black-metal-marduk.css | 163 ------ .../styles/base16/black-metal-marduk.min.css | 7 - .../styles/base16/black-metal-mayhem.css | 163 ------ .../styles/base16/black-metal-mayhem.min.css | 7 - .../styles/base16/black-metal-nile.css | 163 ------ .../styles/base16/black-metal-nile.min.css | 7 - .../styles/base16/black-metal-venom.css | 163 ------ .../styles/base16/black-metal-venom.min.css | 7 - .../styles/base16/black-metal.css | 163 ------ .../styles/base16/black-metal.min.css | 7 - .../lib/highlight.js/styles/base16/brewer.css | 163 ------ .../highlight.js/styles/base16/brewer.min.css | 7 - .../lib/highlight.js/styles/base16/bright.css | 163 ------ .../highlight.js/styles/base16/bright.min.css | 7 - .../highlight.js/styles/base16/brogrammer.css | 163 ------ .../styles/base16/brogrammer.min.css | 7 - .../styles/base16/brush-trees-dark.css | 163 ------ .../styles/base16/brush-trees-dark.min.css | 7 - .../styles/base16/brush-trees.css | 163 ------ .../styles/base16/brush-trees.min.css | 7 - .../lib/highlight.js/styles/base16/chalk.css | 163 ------ .../highlight.js/styles/base16/chalk.min.css | 7 - .../lib/highlight.js/styles/base16/circus.css | 163 ------ .../highlight.js/styles/base16/circus.min.css | 7 - .../styles/base16/classic-dark.css | 163 ------ .../styles/base16/classic-dark.min.css | 7 - .../styles/base16/classic-light.css | 163 ------ .../styles/base16/classic-light.min.css | 7 - .../highlight.js/styles/base16/codeschool.css | 163 ------ .../styles/base16/codeschool.min.css | 7 - .../lib/highlight.js/styles/base16/colors.css | 163 ------ .../highlight.js/styles/base16/colors.min.css | 7 - .../highlight.js/styles/base16/cupcake.css | 163 ------ .../styles/base16/cupcake.min.css | 7 - .../highlight.js/styles/base16/cupertino.css | 163 ------ .../styles/base16/cupertino.min.css | 7 - .../highlight.js/styles/base16/danqing.css | 163 ------ .../styles/base16/danqing.min.css | 7 - .../highlight.js/styles/base16/darcula.css | 163 ------ .../styles/base16/darcula.min.css | 7 - .../styles/base16/dark-violet.css | 163 ------ .../styles/base16/dark-violet.min.css | 7 - .../highlight.js/styles/base16/darkmoss.css | 163 ------ .../styles/base16/darkmoss.min.css | 7 - .../highlight.js/styles/base16/darktooth.css | 163 ------ .../styles/base16/darktooth.min.css | 7 - .../lib/highlight.js/styles/base16/decaf.css | 163 ------ .../highlight.js/styles/base16/decaf.min.css | 7 - .../styles/base16/default-dark.css | 163 ------ .../styles/base16/default-dark.min.css | 7 - .../styles/base16/default-light.css | 163 ------ .../styles/base16/default-light.min.css | 7 - .../highlight.js/styles/base16/dirtysea.css | 163 ------ .../styles/base16/dirtysea.min.css | 7 - .../highlight.js/styles/base16/dracula.css | 163 ------ .../styles/base16/dracula.min.css | 7 - .../highlight.js/styles/base16/edge-dark.css | 163 ------ .../styles/base16/edge-dark.min.css | 7 - .../highlight.js/styles/base16/edge-light.css | 163 ------ .../styles/base16/edge-light.min.css | 7 - .../highlight.js/styles/base16/eighties.css | 163 ------ .../styles/base16/eighties.min.css | 7 - .../lib/highlight.js/styles/base16/embers.css | 163 ------ .../highlight.js/styles/base16/embers.min.css | 7 - .../styles/base16/equilibrium-dark.css | 163 ------ .../styles/base16/equilibrium-dark.min.css | 7 - .../styles/base16/equilibrium-gray-dark.css | 163 ------ .../base16/equilibrium-gray-dark.min.css | 7 - .../styles/base16/equilibrium-gray-light.css | 163 ------ .../base16/equilibrium-gray-light.min.css | 7 - .../styles/base16/equilibrium-light.css | 163 ------ .../styles/base16/equilibrium-light.min.css | 7 - .../highlight.js/styles/base16/espresso.css | 163 ------ .../styles/base16/espresso.min.css | 7 - .../highlight.js/styles/base16/eva-dim.css | 163 ------ .../styles/base16/eva-dim.min.css | 7 - .../lib/highlight.js/styles/base16/eva.css | 163 ------ .../highlight.js/styles/base16/eva.min.css | 7 - .../lib/highlight.js/styles/base16/flat.css | 163 ------ .../highlight.js/styles/base16/flat.min.css | 7 - .../lib/highlight.js/styles/base16/framer.css | 163 ------ .../highlight.js/styles/base16/framer.min.css | 7 - .../highlight.js/styles/base16/fruit-soda.css | 163 ------ .../styles/base16/fruit-soda.min.css | 7 - .../highlight.js/styles/base16/gigavolt.css | 163 ------ .../styles/base16/gigavolt.min.css | 7 - .../lib/highlight.js/styles/base16/github.css | 163 ------ .../highlight.js/styles/base16/github.min.css | 7 - .../styles/base16/google-dark.css | 163 ------ .../styles/base16/google-dark.min.css | 7 - .../styles/base16/google-light.css | 163 ------ .../styles/base16/google-light.min.css | 7 - .../styles/base16/grayscale-dark.css | 163 ------ .../styles/base16/grayscale-dark.min.css | 7 - .../styles/base16/grayscale-light.css | 163 ------ .../styles/base16/grayscale-light.min.css | 7 - .../styles/base16/green-screen.css | 163 ------ .../styles/base16/green-screen.min.css | 7 - .../styles/base16/gruvbox-dark-hard.css | 163 ------ .../styles/base16/gruvbox-dark-hard.min.css | 7 - .../styles/base16/gruvbox-dark-medium.css | 163 ------ .../styles/base16/gruvbox-dark-medium.min.css | 7 - .../styles/base16/gruvbox-dark-pale.css | 163 ------ .../styles/base16/gruvbox-dark-pale.min.css | 7 - .../styles/base16/gruvbox-dark-soft.css | 163 ------ .../styles/base16/gruvbox-dark-soft.min.css | 7 - .../styles/base16/gruvbox-light-hard.css | 163 ------ .../styles/base16/gruvbox-light-hard.min.css | 7 - .../styles/base16/gruvbox-light-medium.css | 163 ------ .../base16/gruvbox-light-medium.min.css | 7 - .../styles/base16/gruvbox-light-soft.css | 163 ------ .../styles/base16/gruvbox-light-soft.min.css | 7 - .../highlight.js/styles/base16/hardcore.css | 163 ------ .../styles/base16/hardcore.min.css | 7 - .../styles/base16/harmonic16-dark.css | 163 ------ .../styles/base16/harmonic16-dark.min.css | 7 - .../styles/base16/harmonic16-light.css | 163 ------ .../styles/base16/harmonic16-light.min.css | 7 - .../styles/base16/heetch-dark.css | 163 ------ .../styles/base16/heetch-dark.min.css | 7 - .../styles/base16/heetch-light.css | 163 ------ .../styles/base16/heetch-light.min.css | 7 - .../lib/highlight.js/styles/base16/helios.css | 163 ------ .../highlight.js/styles/base16/helios.min.css | 7 - .../highlight.js/styles/base16/hopscotch.css | 163 ------ .../styles/base16/hopscotch.min.css | 7 - .../styles/base16/horizon-dark.css | 163 ------ .../styles/base16/horizon-dark.min.css | 7 - .../styles/base16/horizon-light.css | 163 ------ .../styles/base16/horizon-light.min.css | 7 - .../styles/base16/humanoid-dark.css | 163 ------ .../styles/base16/humanoid-dark.min.css | 7 - .../styles/base16/humanoid-light.css | 163 ------ .../styles/base16/humanoid-light.min.css | 7 - .../highlight.js/styles/base16/ia-dark.css | 163 ------ .../styles/base16/ia-dark.min.css | 7 - .../highlight.js/styles/base16/ia-light.css | 163 ------ .../styles/base16/ia-light.min.css | 7 - .../highlight.js/styles/base16/icy-dark.css | 163 ------ .../styles/base16/icy-dark.min.css | 7 - .../highlight.js/styles/base16/ir-black.css | 163 ------ .../styles/base16/ir-black.min.css | 7 - .../highlight.js/styles/base16/isotope.css | 163 ------ .../styles/base16/isotope.min.css | 7 - .../lib/highlight.js/styles/base16/kimber.css | 163 ------ .../highlight.js/styles/base16/kimber.min.css | 7 - .../styles/base16/london-tube.css | 163 ------ .../styles/base16/london-tube.min.css | 7 - .../highlight.js/styles/base16/macintosh.css | 163 ------ .../styles/base16/macintosh.min.css | 7 - .../highlight.js/styles/base16/marrakesh.css | 163 ------ .../styles/base16/marrakesh.min.css | 7 - .../highlight.js/styles/base16/materia.css | 163 ------ .../styles/base16/materia.min.css | 7 - .../styles/base16/material-darker.css | 163 ------ .../styles/base16/material-darker.min.css | 7 - .../styles/base16/material-lighter.css | 163 ------ .../styles/base16/material-lighter.min.css | 7 - .../styles/base16/material-palenight.css | 163 ------ .../styles/base16/material-palenight.min.css | 7 - .../styles/base16/material-vivid.css | 163 ------ .../styles/base16/material-vivid.min.css | 7 - .../highlight.js/styles/base16/material.css | 163 ------ .../styles/base16/material.min.css | 7 - .../styles/base16/mellow-purple.css | 163 ------ .../styles/base16/mellow-purple.min.css | 7 - .../styles/base16/mexico-light.css | 163 ------ .../styles/base16/mexico-light.min.css | 7 - .../lib/highlight.js/styles/base16/mocha.css | 163 ------ .../highlight.js/styles/base16/mocha.min.css | 7 - .../highlight.js/styles/base16/monokai.css | 163 ------ .../styles/base16/monokai.min.css | 7 - .../lib/highlight.js/styles/base16/nebula.css | 163 ------ .../highlight.js/styles/base16/nebula.min.css | 7 - .../lib/highlight.js/styles/base16/nord.css | 163 ------ .../highlight.js/styles/base16/nord.min.css | 7 - .../lib/highlight.js/styles/base16/nova.css | 163 ------ .../highlight.js/styles/base16/nova.min.css | 7 - .../lib/highlight.js/styles/base16/ocean.css | 163 ------ .../highlight.js/styles/base16/ocean.min.css | 7 - .../styles/base16/oceanicnext.css | 163 ------ .../styles/base16/oceanicnext.min.css | 7 - .../highlight.js/styles/base16/one-light.css | 163 ------ .../styles/base16/one-light.min.css | 7 - .../highlight.js/styles/base16/onedark.css | 163 ------ .../styles/base16/onedark.min.css | 7 - .../styles/base16/outrun-dark.css | 163 ------ .../styles/base16/outrun-dark.min.css | 7 - .../styles/base16/papercolor-dark.css | 163 ------ .../styles/base16/papercolor-dark.min.css | 7 - .../styles/base16/papercolor-light.css | 163 ------ .../styles/base16/papercolor-light.min.css | 7 - .../highlight.js/styles/base16/paraiso.css | 163 ------ .../styles/base16/paraiso.min.css | 7 - .../lib/highlight.js/styles/base16/pasque.css | 163 ------ .../highlight.js/styles/base16/pasque.min.css | 7 - .../lib/highlight.js/styles/base16/phd.css | 163 ------ .../highlight.js/styles/base16/phd.min.css | 7 - .../lib/highlight.js/styles/base16/pico.css | 163 ------ .../highlight.js/styles/base16/pico.min.css | 7 - .../lib/highlight.js/styles/base16/pop.css | 163 ------ .../highlight.js/styles/base16/pop.min.css | 7 - .../lib/highlight.js/styles/base16/porple.css | 163 ------ .../highlight.js/styles/base16/porple.min.css | 7 - .../lib/highlight.js/styles/base16/qualia.css | 163 ------ .../highlight.js/styles/base16/qualia.min.css | 7 - .../highlight.js/styles/base16/railscasts.css | 163 ------ .../styles/base16/railscasts.min.css | 7 - .../highlight.js/styles/base16/rebecca.css | 163 ------ .../styles/base16/rebecca.min.css | 7 - .../styles/base16/ros-pine-dawn.css | 163 ------ .../styles/base16/ros-pine-dawn.min.css | 7 - .../styles/base16/ros-pine-moon.css | 163 ------ .../styles/base16/ros-pine-moon.min.css | 7 - .../highlight.js/styles/base16/ros-pine.css | 163 ------ .../styles/base16/ros-pine.min.css | 7 - .../highlight.js/styles/base16/sagelight.css | 163 ------ .../styles/base16/sagelight.min.css | 7 - .../highlight.js/styles/base16/sandcastle.css | 163 ------ .../styles/base16/sandcastle.min.css | 7 - .../highlight.js/styles/base16/seti-ui.css | 163 ------ .../styles/base16/seti-ui.min.css | 7 - .../styles/base16/shapeshifter.css | 163 ------ .../styles/base16/shapeshifter.min.css | 7 - .../highlight.js/styles/base16/silk-dark.css | 163 ------ .../styles/base16/silk-dark.min.css | 7 - .../highlight.js/styles/base16/silk-light.css | 163 ------ .../styles/base16/silk-light.min.css | 7 - .../lib/highlight.js/styles/base16/snazzy.css | 163 ------ .../highlight.js/styles/base16/snazzy.min.css | 7 - .../styles/base16/solar-flare-light.css | 163 ------ .../styles/base16/solar-flare-light.min.css | 7 - .../styles/base16/solar-flare.css | 163 ------ .../styles/base16/solar-flare.min.css | 7 - .../styles/base16/solarized-dark.css | 163 ------ .../styles/base16/solarized-dark.min.css | 7 - .../styles/base16/solarized-light.css | 163 ------ .../styles/base16/solarized-light.min.css | 7 - .../highlight.js/styles/base16/spacemacs.css | 163 ------ .../styles/base16/spacemacs.min.css | 7 - .../highlight.js/styles/base16/summercamp.css | 163 ------ .../styles/base16/summercamp.min.css | 7 - .../styles/base16/summerfruit-dark.css | 163 ------ .../styles/base16/summerfruit-dark.min.css | 7 - .../styles/base16/summerfruit-light.css | 163 ------ .../styles/base16/summerfruit-light.min.css | 7 - .../base16/synth-midnight-terminal-dark.css | 163 ------ .../synth-midnight-terminal-dark.min.css | 7 - .../base16/synth-midnight-terminal-light.css | 163 ------ .../synth-midnight-terminal-light.min.css | 7 - .../lib/highlight.js/styles/base16/tango.css | 163 ------ .../highlight.js/styles/base16/tango.min.css | 7 - .../lib/highlight.js/styles/base16/tender.css | 163 ------ .../highlight.js/styles/base16/tender.min.css | 7 - .../styles/base16/tomorrow-night.css | 163 ------ .../styles/base16/tomorrow-night.min.css | 7 - .../highlight.js/styles/base16/tomorrow.css | 163 ------ .../styles/base16/tomorrow.min.css | 7 - .../highlight.js/styles/base16/twilight.css | 163 ------ .../styles/base16/twilight.min.css | 7 - .../styles/base16/unikitty-dark.css | 163 ------ .../styles/base16/unikitty-dark.min.css | 7 - .../styles/base16/unikitty-light.css | 163 ------ .../styles/base16/unikitty-light.min.css | 7 - .../lib/highlight.js/styles/base16/vulcan.css | 163 ------ .../highlight.js/styles/base16/vulcan.min.css | 7 - .../styles/base16/windows-10-light.css | 163 ------ .../styles/base16/windows-10-light.min.css | 7 - .../highlight.js/styles/base16/windows-10.css | 163 ------ .../styles/base16/windows-10.min.css | 7 - .../styles/base16/windows-95-light.css | 163 ------ .../styles/base16/windows-95-light.min.css | 7 - .../highlight.js/styles/base16/windows-95.css | 163 ------ .../styles/base16/windows-95.min.css | 7 - .../base16/windows-high-contrast-light.css | 163 ------ .../windows-high-contrast-light.min.css | 7 - .../styles/base16/windows-high-contrast.css | 163 ------ .../base16/windows-high-contrast.min.css | 7 - .../styles/base16/windows-nt-light.css | 163 ------ .../styles/base16/windows-nt-light.min.css | 7 - .../highlight.js/styles/base16/windows-nt.css | 163 ------ .../styles/base16/windows-nt.min.css | 7 - .../highlight.js/styles/base16/woodland.css | 163 ------ .../styles/base16/woodland.min.css | 7 - .../highlight.js/styles/base16/xcode-dusk.css | 163 ------ .../styles/base16/xcode-dusk.min.css | 7 - .../highlight.js/styles/base16/zenburn.css | 163 ------ .../styles/base16/zenburn.min.css | 7 - .../lib/highlight.js/styles/brown-paper.css | 63 -- .../highlight.js/styles/brown-paper.min.css | 1 - .../lib/highlight.js/styles/brown-papersq.png | Bin 18198 -> 0 bytes .../lib/highlight.js/styles/codepen-embed.css | 57 -- .../highlight.js/styles/codepen-embed.min.css | 1 - .../lib/highlight.js/styles/color-brewer.css | 66 --- .../highlight.js/styles/color-brewer.min.css | 1 - .../lib/highlight.js/styles/dark.css | 62 -- .../lib/highlight.js/styles/dark.min.css | 1 - .../lib/highlight.js/styles/default.css | 117 ---- .../lib/highlight.js/styles/default.min.css | 9 - .../lib/highlight.js/styles/devibeans.css | 90 --- .../lib/highlight.js/styles/devibeans.min.css | 7 - .../lib/highlight.js/styles/docco.css | 83 --- .../lib/highlight.js/styles/docco.min.css | 1 - .../lib/highlight.js/styles/far.css | 67 --- .../lib/highlight.js/styles/far.min.css | 1 - .../lib/highlight.js/styles/felipec.css | 94 --- .../lib/highlight.js/styles/felipec.min.css | 7 - .../lib/highlight.js/styles/foundation.css | 80 --- .../highlight.js/styles/foundation.min.css | 1 - .../styles/github-dark-dimmed.css | 117 ---- .../styles/github-dark-dimmed.min.css | 9 - .../lib/highlight.js/styles/github-dark.css | 118 ---- .../highlight.js/styles/github-dark.min.css | 10 - .../lib/highlight.js/styles/github.css | 118 ---- .../lib/highlight.js/styles/github.min.css | 10 - .../lib/highlight.js/styles/gml.css | 72 --- .../lib/highlight.js/styles/gml.min.css | 1 - .../lib/highlight.js/styles/googlecode.css | 79 --- .../highlight.js/styles/googlecode.min.css | 1 - .../lib/highlight.js/styles/gradient-dark.css | 90 --- .../highlight.js/styles/gradient-dark.min.css | 1 - .../highlight.js/styles/gradient-light.css | 90 --- .../styles/gradient-light.min.css | 1 - .../lib/highlight.js/styles/grayscale.css | 89 --- .../lib/highlight.js/styles/grayscale.min.css | 1 - .../lib/highlight.js/styles/hybrid.css | 88 --- .../lib/highlight.js/styles/hybrid.min.css | 1 - .../lib/highlight.js/styles/idea.css | 86 --- .../lib/highlight.js/styles/idea.min.css | 1 - .../highlight.js/styles/intellij-light.css | 107 ---- .../styles/intellij-light.min.css | 1 - .../lib/highlight.js/styles/ir-black.css | 66 --- .../lib/highlight.js/styles/ir-black.min.css | 1 - .../highlight.js/styles/isbl-editor-dark.css | 94 --- .../styles/isbl-editor-dark.min.css | 1 - .../highlight.js/styles/isbl-editor-light.css | 93 --- .../styles/isbl-editor-light.min.css | 1 - .../lib/highlight.js/styles/kimbie-dark.css | 69 --- .../highlight.js/styles/kimbie-dark.min.css | 1 - .../lib/highlight.js/styles/kimbie-light.css | 69 --- .../highlight.js/styles/kimbie-light.min.css | 1 - .../lib/highlight.js/styles/lightfair.css | 81 --- .../lib/highlight.js/styles/lightfair.min.css | 1 - .../lib/highlight.js/styles/lioshi.css | 76 --- .../lib/highlight.js/styles/lioshi.min.css | 1 - .../lib/highlight.js/styles/magula.css | 66 --- .../lib/highlight.js/styles/magula.min.css | 1 - .../lib/highlight.js/styles/mono-blue.css | 56 -- .../lib/highlight.js/styles/mono-blue.min.css | 1 - .../highlight.js/styles/monokai-sublime.css | 76 --- .../styles/monokai-sublime.min.css | 1 - .../lib/highlight.js/styles/monokai.css | 68 --- .../lib/highlight.js/styles/monokai.min.css | 1 - .../lib/highlight.js/styles/night-owl.css | 174 ------ .../lib/highlight.js/styles/night-owl.min.css | 1 - .../lib/highlight.js/styles/nnfx-dark.css | 104 ---- .../lib/highlight.js/styles/nnfx-dark.min.css | 10 - .../lib/highlight.js/styles/nnfx-light.css | 104 ---- .../highlight.js/styles/nnfx-light.min.css | 10 - .../lib/highlight.js/styles/nord.css | 275 --------- .../lib/highlight.js/styles/nord.min.css | 1 - .../lib/highlight.js/styles/obsidian.css | 79 --- .../lib/highlight.js/styles/obsidian.min.css | 1 - .../highlight.js/styles/panda-syntax-dark.css | 92 --- .../styles/panda-syntax-dark.min.css | 1 - .../styles/panda-syntax-light.css | 89 --- .../styles/panda-syntax-light.min.css | 1 - .../lib/highlight.js/styles/paraiso-dark.css | 67 --- .../highlight.js/styles/paraiso-dark.min.css | 1 - .../lib/highlight.js/styles/paraiso-light.css | 67 --- .../highlight.js/styles/paraiso-light.min.css | 1 - .../lib/highlight.js/styles/pojoaque.css | 76 --- .../lib/highlight.js/styles/pojoaque.jpg | Bin 1186 -> 0 bytes .../lib/highlight.js/styles/pojoaque.min.css | 1 - .../lib/highlight.js/styles/purebasic.css | 103 ---- .../lib/highlight.js/styles/purebasic.min.css | 1 - .../highlight.js/styles/qtcreator-dark.css | 76 --- .../styles/qtcreator-dark.min.css | 1 - .../highlight.js/styles/qtcreator-light.css | 74 --- .../styles/qtcreator-light.min.css | 1 - .../lib/highlight.js/styles/rainbow.css | 77 --- .../lib/highlight.js/styles/rainbow.min.css | 1 - .../lib/highlight.js/styles/routeros.css | 86 --- .../lib/highlight.js/styles/routeros.min.css | 1 - .../lib/highlight.js/styles/school-book.css | 62 -- .../highlight.js/styles/school-book.min.css | 1 - .../highlight.js/styles/shades-of-purple.css | 84 --- .../styles/shades-of-purple.min.css | 1 - .../lib/highlight.js/styles/srcery.css | 89 --- .../lib/highlight.js/styles/srcery.min.css | 1 - .../styles/stackoverflow-dark.css | 117 ---- .../styles/stackoverflow-dark.min.css | 13 - .../styles/stackoverflow-light.css | 117 ---- .../styles/stackoverflow-light.min.css | 13 - .../lib/highlight.js/styles/sunburst.css | 89 --- .../lib/highlight.js/styles/sunburst.min.css | 1 - .../styles/tokyo-night-dark.min.css | 8 - .../highlight.js/styles/tokyo-night-light.css | 114 ---- .../styles/tokyo-night-light.min.css | 8 - .../styles/tomorrow-night-blue.css | 69 --- .../styles/tomorrow-night-blue.min.css | 1 - .../styles/tomorrow-night-bright.css | 68 --- .../styles/tomorrow-night-bright.min.css | 1 - .../lib/highlight.js/styles/vs.css | 63 -- .../lib/highlight.js/styles/vs.min.css | 1 - .../lib/highlight.js/styles/vs2015.css | 100 ---- .../lib/highlight.js/styles/vs2015.min.css | 1 - .../lib/highlight.js/styles/xcode.css | 90 --- .../lib/highlight.js/styles/xcode.min.css | 1 - .../lib/highlight.js/styles/xt256.css | 79 --- .../lib/highlight.js/styles/xt256.min.css | 1 - apps/documentation/lib/i18n/request.ts | 34 +- apps/documentation/lib/processPreTags.ts | 38 +- apps/documentation/lib/processYamlMatter.ts | 32 +- apps/documentation/lib/tableOfContents.ts | 100 ++-- apps/documentation/lib/utils.ts | 6 +- apps/documentation/lib/writeSidebarJson.ts | 199 +++---- apps/documentation/messages/en.json | 216 +++---- apps/documentation/navigation.ts | 7 +- apps/documentation/next-sitemap.config.js | 6 +- apps/documentation/next.config.js | 39 +- apps/documentation/package.json | 144 ++--- apps/documentation/postcss.config.cjs | 8 +- apps/documentation/public/assets/js/custom.js | 20 - .../public/assets/js/search-data.json | 12 - apps/documentation/public/sidebar.json | 425 ++++++++++++++ apps/documentation/styles/globals.css | 286 +++++---- apps/documentation/styles/prism.css | 18 +- .../styles/tokyo-night-dark.css | 40 +- apps/documentation/tailwind.config.ts | 33 +- apps/documentation/tsconfig.json | 44 +- apps/documentation/types.d.ts | 24 +- apps/documentation/vercel.json | 164 +++--- biome.json | 20 + package.json | 38 +- packages/analytics/package.json | 48 +- packages/analytics/src/index.ts | 388 ++++++------- packages/analytics/src/utils.ts | 27 +- packages/analytics/tsconfig.json | 14 +- packages/art/package.json | 56 +- .../src/BackgroundBlobs/BackgroundBlobs.tsx | 498 ++++++++-------- packages/art/src/BackgroundBlobs/Canvas.tsx | 18 +- packages/art/src/BackgroundBlobs/useCanvas.ts | 122 ++-- packages/art/src/index.ts | 4 +- packages/art/tailwind.config.ts | 8 +- packages/art/tsconfig.json | 12 +- packages/shared-consts/package.json | 43 +- packages/shared-consts/src/assets.ts | 10 +- packages/shared-consts/src/codebook.ts | 28 +- packages/shared-consts/src/controls/index.ts | 144 +++-- packages/shared-consts/src/export-process.ts | 20 +- packages/shared-consts/src/index.ts | 20 +- packages/shared-consts/src/network.ts | 34 +- packages/shared-consts/src/protocol.ts | 26 +- packages/shared-consts/src/session.ts | 16 +- packages/shared-consts/src/stages.ts | 238 ++++---- packages/shared-consts/src/variables.ts | 68 +-- packages/shared-consts/tsconfig.json | 12 +- packages/ui/package.json | 114 ++-- packages/ui/src/Alert.tsx | 90 ++- packages/ui/src/AlertDialog.tsx | 161 +++--- packages/ui/src/Button.tsx | 104 ++-- packages/ui/src/CloseButton.tsx | 64 +-- packages/ui/src/Divider.tsx | 9 +- packages/ui/src/ErrorDialog.tsx | 86 ++- packages/ui/src/FancyBox.tsx | 209 +++---- packages/ui/src/FancyButton.tsx | 72 ++- packages/ui/src/FormattedDate.tsx | 35 +- packages/ui/src/Input.tsx | 150 +++-- packages/ui/src/Label.tsx | 42 +- packages/ui/src/TimeAgo.tsx | 93 ++- packages/ui/src/accordion.tsx | 70 ++- packages/ui/src/badge.tsx | 45 +- packages/ui/src/card.tsx | 106 ++-- packages/ui/src/checkbox.tsx | 44 +- packages/ui/src/collapsible.tsx | 4 +- packages/ui/src/command.tsx | 189 +++--- packages/ui/src/dialog.tsx | 171 +++--- packages/ui/src/dropdown-menu.tsx | 269 ++++----- packages/ui/src/form.tsx | 259 ++++----- packages/ui/src/index.ts | 169 +++--- packages/ui/src/popover.tsx | 38 +- packages/ui/src/progress.tsx | 45 +- packages/ui/src/scroll-area.tsx | 69 +-- packages/ui/src/select.tsx | 167 +++--- packages/ui/src/separator.tsx | 39 +- packages/ui/src/sheet.tsx | 171 +++--- packages/ui/src/skeleton.tsx | 11 +- packages/ui/src/switch.tsx | 40 +- packages/ui/src/table.tsx | 173 +++--- packages/ui/src/tabs.tsx | 68 +-- packages/ui/src/theme.tsx | 57 +- packages/ui/src/toast.tsx | 158 +++-- packages/ui/src/toaster.tsx | 60 +- packages/ui/src/tooltip.tsx | 30 +- packages/ui/src/typography/Details.tsx | 91 ++- packages/ui/src/typography/Heading.tsx | 102 ++-- packages/ui/src/typography/Lists.tsx | 46 +- packages/ui/src/typography/PageHeader.tsx | 24 +- packages/ui/src/typography/Paragraph.tsx | 89 ++- packages/ui/src/typography/Typography.tsx | 90 ++- packages/ui/src/use-toast.ts | 284 +++++---- packages/ui/src/utils.ts | 6 +- packages/ui/tailwind.config.ts | 8 +- packages/ui/tsconfig.json | 12 +- tooling/github/package.json | 2 +- tooling/tailwind/base.ts | 106 ++-- tooling/tailwind/fresco.ts | 385 +++++++------ tooling/tailwind/globals.css | 247 ++++---- tooling/tailwind/package.json | 44 +- tooling/tailwind/tsconfig.json | 12 +- tooling/typescript/base.json | 38 +- tooling/typescript/package.json | 10 +- turbo.json | 75 ++- 724 files changed, 8475 insertions(+), 45806 deletions(-) delete mode 100644 apps/documentation/.gitignore delete mode 100644 apps/documentation/lib/highlight.js/styles/a11y-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/a11y-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/a11y-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/a11y-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/agate.css delete mode 100644 apps/documentation/lib/highlight.js/styles/agate.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/an-old-hope.css delete mode 100644 apps/documentation/lib/highlight.js/styles/an-old-hope.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/androidstudio.css delete mode 100644 apps/documentation/lib/highlight.js/styles/androidstudio.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/arduino-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/arduino-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/arta.css delete mode 100644 apps/documentation/lib/highlight.js/styles/arta.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/ascetic.css delete mode 100644 apps/documentation/lib/highlight.js/styles/ascetic.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/atom-one-dark-reasonable.css delete mode 100644 apps/documentation/lib/highlight.js/styles/atom-one-dark-reasonable.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/atom-one-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/atom-one-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/atom-one-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/atom-one-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/3024.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/3024.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/apathy.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/apathy.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/apprentice.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/apprentice.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ashes.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ashes.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-cave-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-cave-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-cave.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-cave.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-dune-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-dune-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-dune.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-dune.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-estuary-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-estuary-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-estuary.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-estuary.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-forest-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-forest-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-forest.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-forest.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-heath-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-heath-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-heath.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-heath.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-lakeside-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-lakeside-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-lakeside.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-lakeside.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-plateau-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-plateau-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-plateau.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-plateau.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-savanna-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-savanna-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-savanna.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-savanna.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-seaside-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-seaside-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-seaside.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-seaside.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-sulphurpool-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-sulphurpool-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-sulphurpool.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atelier-sulphurpool.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atlas.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/atlas.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/bespin.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/bespin.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-bathory.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-bathory.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-burzum.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-burzum.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-dark-funeral.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-dark-funeral.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-gorgoroth.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-gorgoroth.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-immortal.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-immortal.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-khold.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-khold.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-marduk.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-marduk.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-mayhem.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-mayhem.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-nile.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-nile.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-venom.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal-venom.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/black-metal.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brewer.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brewer.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/bright.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/bright.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brogrammer.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brogrammer.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brush-trees-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brush-trees-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brush-trees.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/brush-trees.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/chalk.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/chalk.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/circus.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/circus.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/classic-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/classic-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/classic-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/classic-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/codeschool.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/codeschool.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/colors.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/colors.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/cupcake.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/cupcake.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/cupertino.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/cupertino.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/danqing.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/danqing.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/darcula.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/darcula.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/dark-violet.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/dark-violet.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/darkmoss.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/darkmoss.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/darktooth.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/darktooth.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/decaf.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/decaf.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/default-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/default-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/default-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/default-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/dirtysea.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/dirtysea.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/dracula.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/dracula.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/edge-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/edge-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/edge-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/edge-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/eighties.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/eighties.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/embers.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/embers.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-gray-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-gray-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-gray-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-gray-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/equilibrium-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/espresso.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/espresso.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/eva-dim.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/eva-dim.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/eva.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/eva.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/flat.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/flat.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/framer.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/framer.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/fruit-soda.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/fruit-soda.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gigavolt.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gigavolt.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/github.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/github.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/google-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/google-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/google-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/google-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/grayscale-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/grayscale-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/grayscale-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/grayscale-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/green-screen.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/green-screen.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-hard.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-hard.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-medium.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-medium.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-pale.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-pale.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-soft.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-dark-soft.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-light-hard.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-light-hard.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-light-medium.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-light-medium.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-light-soft.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/gruvbox-light-soft.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/hardcore.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/hardcore.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/harmonic16-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/harmonic16-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/harmonic16-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/harmonic16-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/heetch-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/heetch-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/heetch-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/heetch-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/helios.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/helios.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/hopscotch.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/hopscotch.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/horizon-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/horizon-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/horizon-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/horizon-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/humanoid-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/humanoid-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/humanoid-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/humanoid-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ia-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ia-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ia-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ia-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/icy-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/icy-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ir-black.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ir-black.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/isotope.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/isotope.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/kimber.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/kimber.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/london-tube.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/london-tube.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/macintosh.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/macintosh.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/marrakesh.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/marrakesh.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/materia.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/materia.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-darker.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-darker.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-lighter.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-lighter.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-palenight.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-palenight.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-vivid.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material-vivid.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/material.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/mellow-purple.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/mellow-purple.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/mexico-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/mexico-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/mocha.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/mocha.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/monokai.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/monokai.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/nebula.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/nebula.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/nord.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/nord.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/nova.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/nova.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ocean.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ocean.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/oceanicnext.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/oceanicnext.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/one-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/one-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/onedark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/onedark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/outrun-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/outrun-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/papercolor-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/papercolor-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/papercolor-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/papercolor-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/paraiso.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/paraiso.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/pasque.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/pasque.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/phd.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/phd.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/pico.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/pico.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/pop.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/pop.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/porple.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/porple.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/qualia.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/qualia.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/railscasts.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/railscasts.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/rebecca.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/rebecca.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ros-pine-dawn.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ros-pine-dawn.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ros-pine-moon.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ros-pine-moon.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ros-pine.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/ros-pine.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/sagelight.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/sagelight.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/sandcastle.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/sandcastle.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/seti-ui.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/seti-ui.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/shapeshifter.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/shapeshifter.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/silk-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/silk-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/silk-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/silk-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/snazzy.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/snazzy.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solar-flare-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solar-flare-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solar-flare.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solar-flare.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solarized-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solarized-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solarized-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/solarized-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/spacemacs.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/spacemacs.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/summercamp.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/summercamp.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/summerfruit-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/summerfruit-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/summerfruit-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/summerfruit-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/synth-midnight-terminal-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/synth-midnight-terminal-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/synth-midnight-terminal-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tango.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tango.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tender.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tender.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tomorrow-night.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tomorrow-night.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tomorrow.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/tomorrow.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/twilight.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/twilight.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/unikitty-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/unikitty-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/unikitty-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/unikitty-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/vulcan.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/vulcan.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-10-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-10-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-10.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-10.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-95-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-95-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-95.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-95.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-high-contrast-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-high-contrast-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-high-contrast.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-high-contrast.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-nt-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-nt-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-nt.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/windows-nt.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/woodland.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/woodland.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/xcode-dusk.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/xcode-dusk.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/zenburn.css delete mode 100644 apps/documentation/lib/highlight.js/styles/base16/zenburn.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/brown-paper.css delete mode 100644 apps/documentation/lib/highlight.js/styles/brown-paper.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/brown-papersq.png delete mode 100644 apps/documentation/lib/highlight.js/styles/codepen-embed.css delete mode 100644 apps/documentation/lib/highlight.js/styles/codepen-embed.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/color-brewer.css delete mode 100644 apps/documentation/lib/highlight.js/styles/color-brewer.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/default.css delete mode 100644 apps/documentation/lib/highlight.js/styles/default.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/devibeans.css delete mode 100644 apps/documentation/lib/highlight.js/styles/devibeans.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/docco.css delete mode 100644 apps/documentation/lib/highlight.js/styles/docco.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/far.css delete mode 100644 apps/documentation/lib/highlight.js/styles/far.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/felipec.css delete mode 100644 apps/documentation/lib/highlight.js/styles/felipec.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/foundation.css delete mode 100644 apps/documentation/lib/highlight.js/styles/foundation.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/github-dark-dimmed.css delete mode 100644 apps/documentation/lib/highlight.js/styles/github-dark-dimmed.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/github-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/github-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/github.css delete mode 100644 apps/documentation/lib/highlight.js/styles/github.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/gml.css delete mode 100644 apps/documentation/lib/highlight.js/styles/gml.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/googlecode.css delete mode 100644 apps/documentation/lib/highlight.js/styles/googlecode.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/gradient-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/gradient-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/gradient-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/gradient-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/grayscale.css delete mode 100644 apps/documentation/lib/highlight.js/styles/grayscale.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/hybrid.css delete mode 100644 apps/documentation/lib/highlight.js/styles/hybrid.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/idea.css delete mode 100644 apps/documentation/lib/highlight.js/styles/idea.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/intellij-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/intellij-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/ir-black.css delete mode 100644 apps/documentation/lib/highlight.js/styles/ir-black.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/isbl-editor-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/isbl-editor-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/isbl-editor-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/isbl-editor-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/kimbie-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/kimbie-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/kimbie-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/kimbie-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/lightfair.css delete mode 100644 apps/documentation/lib/highlight.js/styles/lightfair.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/lioshi.css delete mode 100644 apps/documentation/lib/highlight.js/styles/lioshi.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/magula.css delete mode 100644 apps/documentation/lib/highlight.js/styles/magula.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/mono-blue.css delete mode 100644 apps/documentation/lib/highlight.js/styles/mono-blue.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/monokai-sublime.css delete mode 100644 apps/documentation/lib/highlight.js/styles/monokai-sublime.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/monokai.css delete mode 100644 apps/documentation/lib/highlight.js/styles/monokai.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/night-owl.css delete mode 100644 apps/documentation/lib/highlight.js/styles/night-owl.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/nnfx-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/nnfx-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/nnfx-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/nnfx-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/nord.css delete mode 100644 apps/documentation/lib/highlight.js/styles/nord.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/obsidian.css delete mode 100644 apps/documentation/lib/highlight.js/styles/obsidian.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/panda-syntax-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/panda-syntax-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/panda-syntax-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/panda-syntax-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/paraiso-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/paraiso-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/paraiso-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/paraiso-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/pojoaque.css delete mode 100644 apps/documentation/lib/highlight.js/styles/pojoaque.jpg delete mode 100644 apps/documentation/lib/highlight.js/styles/pojoaque.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/purebasic.css delete mode 100644 apps/documentation/lib/highlight.js/styles/purebasic.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/qtcreator-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/qtcreator-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/qtcreator-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/qtcreator-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/rainbow.css delete mode 100644 apps/documentation/lib/highlight.js/styles/rainbow.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/routeros.css delete mode 100644 apps/documentation/lib/highlight.js/styles/routeros.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/school-book.css delete mode 100644 apps/documentation/lib/highlight.js/styles/school-book.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/shades-of-purple.css delete mode 100644 apps/documentation/lib/highlight.js/styles/shades-of-purple.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/srcery.css delete mode 100644 apps/documentation/lib/highlight.js/styles/srcery.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/stackoverflow-dark.css delete mode 100644 apps/documentation/lib/highlight.js/styles/stackoverflow-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/stackoverflow-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/stackoverflow-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/sunburst.css delete mode 100644 apps/documentation/lib/highlight.js/styles/sunburst.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tokyo-night-dark.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tokyo-night-light.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tokyo-night-light.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tomorrow-night-blue.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tomorrow-night-blue.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tomorrow-night-bright.css delete mode 100644 apps/documentation/lib/highlight.js/styles/tomorrow-night-bright.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/vs.css delete mode 100644 apps/documentation/lib/highlight.js/styles/vs.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/vs2015.css delete mode 100644 apps/documentation/lib/highlight.js/styles/vs2015.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/xcode.css delete mode 100644 apps/documentation/lib/highlight.js/styles/xcode.min.css delete mode 100644 apps/documentation/lib/highlight.js/styles/xt256.css delete mode 100644 apps/documentation/lib/highlight.js/styles/xt256.min.css delete mode 100644 apps/documentation/public/assets/js/custom.js delete mode 100644 apps/documentation/public/assets/js/search-data.json create mode 100644 apps/documentation/public/sidebar.json rename apps/documentation/{lib/highlight.js => }/styles/tokyo-night-dark.css (85%) create mode 100644 biome.json diff --git a/.changeset/config.json b/.changeset/config.json index f26daf14..0bb16124 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,11 +1,11 @@ { - "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "fixed": [], - "linked": [], - "access": "public", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] + "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] } diff --git a/.gitignore b/.gitignore index f922be27..0cb646b6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,15 +6,13 @@ node_modules .pnp.js .yarn/install-state.gz -# testing -/coverage # next.js -/.next/ -/out/ +**/.next/ +**/out/ # production -/build +**/build # misc .DS_Store @@ -30,7 +28,7 @@ yarn-error.log* .env # vercel -.vercel +**/.vercel # typescript *.tsbuildinfo diff --git a/.vscode/settings.json b/.vscode/settings.json index 9df14f3a..37d70424 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,11 +1,10 @@ { - "typescript.tsdk": "./node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true, - "cSpell.enableFiletypes": [ - "mdx" - ], - "cSpell.words": [ - "netcanvas", - "Tipbox" - ] -} \ No newline at end of file + "typescript.tsdk": "./node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, + "cSpell.enableFiletypes": ["mdx"], + "cSpell.words": ["netcanvas", "Tipbox"], + "editor.defaultFormatter": "biomejs.biome", + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + } +} diff --git a/apps/analytics-web/app/_actions/actions.ts b/apps/analytics-web/app/_actions/actions.ts index b4b3c05b..aeff3e93 100644 --- a/apps/analytics-web/app/_actions/actions.ts +++ b/apps/analytics-web/app/_actions/actions.ts @@ -1,34 +1,31 @@ -'use server'; +"use server"; -import { type EventInsertType, db } from '~/db/db'; -import { eventsTable } from '~/db/schema'; +import { type EventInsertType, db } from "~/db/db"; +import { eventsTable } from "~/db/schema"; export async function getEvents() { - try { - const events = await db.query.eventsTable.findMany({ - orderBy: (events, { desc }) => [desc(events.timestamp)], - }); + try { + const events = await db.query.eventsTable.findMany({ + orderBy: (events, { desc }) => [desc(events.timestamp)], + }); - return events; - } catch (error) { - console.error('Error getting events', error); - return []; - } + return events; + } catch (error) { + console.error("Error getting events", error); + return []; + } } type Events = Awaited>; export type Event = Events[0]; export async function insertEvent(event: EventInsertType) { - try { - const insertedEvent = await db - .insert(eventsTable) - .values(event) - .returning(); + try { + const insertedEvent = await db.insert(eventsTable).values(event).returning(); - return { data: insertedEvent, error: null }; - } catch (error) { - console.error('Error inserting events', error); - return { data: null, error: 'Error inserting events' }; - } + return { data: insertedEvent, error: null }; + } catch (error) { + console.error("Error inserting events", error); + return { data: null, error: "Error inserting events" }; + } } diff --git a/apps/analytics-web/app/_components/analytics/AnalyticsView.tsx b/apps/analytics-web/app/_components/analytics/AnalyticsView.tsx index 4d5032f9..9f985309 100644 --- a/apps/analytics-web/app/_components/analytics/AnalyticsView.tsx +++ b/apps/analytics-web/app/_components/analytics/AnalyticsView.tsx @@ -1,38 +1,38 @@ -import { getEvents } from '~/app/_actions/actions'; -import { Card, CardContent, CardHeader } from '~/components/ui/card'; -import EventsTable from './EventsTable/EventsTable'; -import RegionsTable from './RegionsTable/RegionsTable'; -import TotalAppsCard from './cards/TotalAppsCard'; -import TotalDataExported from './cards/TotalDataExported'; -import TotalErrorsCard from './cards/TotalErrorsCard'; -import TotalInterviewsCompletedCard from './cards/TotalInterviewsCompletedCard'; -import TotalInterviewsStartedCard from './cards/TotalInterviewsStartedCard'; -import TotalProtocolsInstalledCard from './cards/TotalProtocolsInstalledCard'; +import { getEvents } from "~/app/_actions/actions"; +import { Card, CardContent, CardHeader } from "~/components/ui/card"; +import EventsTable from "./EventsTable/EventsTable"; +import RegionsTable from "./RegionsTable/RegionsTable"; +import TotalAppsCard from "./cards/TotalAppsCard"; +import TotalDataExported from "./cards/TotalDataExported"; +import TotalErrorsCard from "./cards/TotalErrorsCard"; +import TotalInterviewsCompletedCard from "./cards/TotalInterviewsCompletedCard"; +import TotalInterviewsStartedCard from "./cards/TotalInterviewsStartedCard"; +import TotalProtocolsInstalledCard from "./cards/TotalProtocolsInstalledCard"; export default async function AnalyticsView() { - const events = await getEvents(); + const events = await getEvents(); - return ( -
-
- - - - - - -
-
-
- -
- - Regions - - - - -
-
- ); + return ( +
+
+ + + + + + +
+
+
+ +
+ + Regions + + + + +
+
+ ); } diff --git a/apps/analytics-web/app/_components/analytics/EventsTable/Columns.tsx b/apps/analytics-web/app/_components/analytics/EventsTable/Columns.tsx index 26d2be38..d87fba90 100644 --- a/apps/analytics-web/app/_components/analytics/EventsTable/Columns.tsx +++ b/apps/analytics-web/app/_components/analytics/EventsTable/Columns.tsx @@ -1,90 +1,73 @@ -'use client'; +"use client"; -import { type ColumnDef } from '@tanstack/react-table'; -import { type Dispatch, type SetStateAction } from 'react'; -import { DataTableColumnHeader } from '~/components/DataTable/column-header'; -import { MetadataDialog } from '~/components/MetadataDialog'; -import { type EventType } from './EventsTable'; -import { StackTraceDialog } from './StackTraceDialog'; -import TableFilter from './TableFilter'; -import { type Event } from '~/app/_actions/actions'; +import type { ColumnDef } from "@tanstack/react-table"; +import type { Dispatch, SetStateAction } from "react"; +import type { Event } from "~/app/_actions/actions"; +import { DataTableColumnHeader } from "~/components/DataTable/column-header"; +import { MetadataDialog } from "~/components/MetadataDialog"; +import type { EventType } from "./EventsTable"; +import { StackTraceDialog } from "./StackTraceDialog"; +import TableFilter from "./TableFilter"; -export const getColumns = ( - eventTypes: EventType[], - setEventTypes: Dispatch>, -) => { - const columns: ColumnDef[] = [ - { - accessorKey: 'type', - header: ({ column }) => ( -
- - -
- ), - }, - { - accessorKey: 'timestamp', - header: ({ column }) => ( - - ), - cell: ({ row }) => { - return ( -
- {row.original.timestamp.toUTCString()} -
- ); - }, - }, - { - accessorKey: 'installationId', - header: ({ column }) => ( - - ), - cell: ({ row }) => { - return
{row.original.installationId}
; - }, - }, - { - accessorKey: 'name', - header: ({ column }) => ( - - ), - }, - { - accessorKey: 'message', - header: ({ column }) => ( - - ), - }, - { - accessorKey: 'cause', - header: ({ column }) => ( - - ), - }, - { - accessorKey: 'stack', - header: '', - cell: ({ row }) => - row.original.stack && ( -
- -
- ), - }, - { - accessorKey: 'metadata', - header: '', - cell: ({ row }) => { - return ( -
- -
- ); - }, - }, - ]; +export const getColumns = (eventTypes: EventType[], setEventTypes: Dispatch>) => { + const columns: ColumnDef[] = [ + { + accessorKey: "type", + header: ({ column }) => ( +
+ + +
+ ), + }, + { + accessorKey: "timestamp", + header: ({ column }) => , + cell: ({ row }) => { + return
{row.original.timestamp.toUTCString()}
; + }, + }, + { + accessorKey: "installationId", + header: ({ column }) => , + cell: ({ row }) => { + return
{row.original.installationId}
; + }, + }, + { + accessorKey: "name", + header: ({ column }) => , + }, + { + accessorKey: "message", + header: ({ column }) => , + }, + { + accessorKey: "cause", + header: ({ column }) => , + }, + { + accessorKey: "stack", + header: "", + cell: ({ row }) => + row.original.stack && ( +
+ +
+ ), + }, + { + accessorKey: "metadata", + header: "", + cell: ({ row }) => { + return ( +
+ +
+ ); + }, + }, + ]; - return columns; + return columns; }; diff --git a/apps/analytics-web/app/_components/analytics/EventsTable/EventsTable.tsx b/apps/analytics-web/app/_components/analytics/EventsTable/EventsTable.tsx index 9a2b0edd..6220f338 100644 --- a/apps/analytics-web/app/_components/analytics/EventsTable/EventsTable.tsx +++ b/apps/analytics-web/app/_components/analytics/EventsTable/EventsTable.tsx @@ -1,67 +1,57 @@ -'use client'; +"use client"; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { getEvents, type Event } from '~/app/_actions/actions'; -import { DataTable } from '~/components/DataTable/data-table'; -import ExportButton from '~/components/ExportButton'; -import { getColumns } from './Columns'; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { type Event, getEvents } from "~/app/_actions/actions"; +import { DataTable } from "~/components/DataTable/data-table"; +import ExportButton from "~/components/ExportButton"; +import { getColumns } from "./Columns"; export type EventType = { - text: string; - isSelected: boolean; + text: string; + isSelected: boolean; }; export default function EventsTable() { - const [events, setEvents] = useState([]); - const [eventTypes, setEventTypes] = useState([]); - - const fetchEvents = useCallback(async () => { - const data = await getEvents(); - setEvents(data); - }, []); - - useEffect(() => { - void fetchEvents(); - }, [fetchEvents]); - - useEffect(() => { - const eventTypesMap = new Map(); - events.forEach((event) => - eventTypesMap.set(event.type, { text: event.type, isSelected: true }), - ); - - setEventTypes([...Array.from(eventTypesMap.values())]); - }, [events]); - - const filteredEvents = useMemo(() => { - const filters = eventTypes - .filter((type) => type.isSelected) - .map((type) => type.text); - - return events.filter((event) => filters.includes(event.type)); - }, [eventTypes, events]); - - return ( - <> -
-
-

Events

- {!events.length &&

Loading...

} -
- {!!events.length && ( - - )} -
- -
- {!!events.length && ( - - )} -
- - ); + const [events, setEvents] = useState([]); + const [eventTypes, setEventTypes] = useState([]); + + const fetchEvents = useCallback(async () => { + const data = await getEvents(); + setEvents(data); + }, []); + + useEffect(() => { + void fetchEvents(); + }, [fetchEvents]); + + useEffect(() => { + const eventTypesMap = new Map(); + events.forEach((event) => eventTypesMap.set(event.type, { text: event.type, isSelected: true })); + + setEventTypes([...Array.from(eventTypesMap.values())]); + }, [events]); + + const filteredEvents = useMemo(() => { + const filters = eventTypes.filter((type) => type.isSelected).map((type) => type.text); + + return events.filter((event) => filters.includes(event.type)); + }, [eventTypes, events]); + + return ( + <> +
+
+

Events

+ {!events.length &&

Loading...

} +
+ {!!events.length && } +
+ +
+ {!!events.length && ( + + )} +
+ + ); } diff --git a/apps/analytics-web/app/_components/analytics/EventsTable/StackTraceDialog.tsx b/apps/analytics-web/app/_components/analytics/EventsTable/StackTraceDialog.tsx index 08f36c5d..d07e1078 100644 --- a/apps/analytics-web/app/_components/analytics/EventsTable/StackTraceDialog.tsx +++ b/apps/analytics-web/app/_components/analytics/EventsTable/StackTraceDialog.tsx @@ -1,13 +1,8 @@ -import { type Event } from '~/app/_actions/actions'; -import { DialogButton } from '~/components/DialogButton'; +import type { Event } from "~/app/_actions/actions"; +import { DialogButton } from "~/components/DialogButton"; export function StackTraceDialog({ error }: { error: Event }) { - return ( - - ); + return ( + + ); } diff --git a/apps/analytics-web/app/_components/analytics/EventsTable/TableFilter.tsx b/apps/analytics-web/app/_components/analytics/EventsTable/TableFilter.tsx index f027d660..5df49cd7 100644 --- a/apps/analytics-web/app/_components/analytics/EventsTable/TableFilter.tsx +++ b/apps/analytics-web/app/_components/analytics/EventsTable/TableFilter.tsx @@ -1,88 +1,77 @@ -'use client'; +"use client"; -import { useState, type Dispatch, type SetStateAction } from 'react'; -import { Button } from '~/components/ui/button'; -import { Checkbox } from '~/components/ui/checkbox'; +import { type Dispatch, type SetStateAction, useState } from "react"; +import { Button } from "~/components/ui/button"; +import { Checkbox } from "~/components/ui/checkbox"; import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuTrigger, -} from '~/components/ui/dropdown-menu'; -import { type EventType } from './EventsTable'; + DropdownMenu, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "~/components/ui/dropdown-menu"; +import type { EventType } from "./EventsTable"; type TableFilterProps = { - eventTypes: EventType[]; - setEventTypes: Dispatch>; + eventTypes: EventType[]; + setEventTypes: Dispatch>; }; const TableFilter = ({ eventTypes, setEventTypes }: TableFilterProps) => { - const [options, setOptions] = useState(eventTypes); + const [options, setOptions] = useState(eventTypes); - const toggleOption = (option: string) => { - setOptions((prevState) => - prevState.map((t) => - t.text === option ? { ...t, isSelected: !t.isSelected } : t, - ), - ); - }; + const toggleOption = (option: string) => { + setOptions((prevState) => prevState.map((t) => (t.text === option ? { ...t, isSelected: !t.isSelected } : t))); + }; - const toggleAllOptions = (isSelected: boolean) => { - setOptions((prevState) => prevState.map((t) => ({ ...t, isSelected }))); - }; + const toggleAllOptions = (isSelected: boolean) => { + setOptions((prevState) => prevState.map((t) => ({ ...t, isSelected }))); + }; - const isAllSelected = options.every((option) => option.isSelected); + const isAllSelected = options.every((option) => option.isSelected); - return ( - - - - - - Select events - + return ( + + + + + + Select events + -
- - +
+ + - {options.map((option) => ( - - ))} + {options.map((option) => ( + + ))} - -
- - - ); + +
+
+
+ ); }; export default TableFilter; diff --git a/apps/analytics-web/app/_components/analytics/RegionsTable/Columns.tsx b/apps/analytics-web/app/_components/analytics/RegionsTable/Columns.tsx index 8c30a90c..944aea00 100644 --- a/apps/analytics-web/app/_components/analytics/RegionsTable/Columns.tsx +++ b/apps/analytics-web/app/_components/analytics/RegionsTable/Columns.tsx @@ -1,13 +1,13 @@ -'use client'; -import { type ColumnDef } from '@tanstack/react-table'; -import { type RegionTotal } from '~/utils/getRegionsTotals'; +"use client"; +import type { ColumnDef } from "@tanstack/react-table"; +import type { RegionTotal } from "~/utils/getRegionsTotals"; export const columns: ColumnDef[] = [ - { - accessorKey: 'country', - header: 'Country', - }, - { - accessorKey: 'total', - header: 'Total', - }, + { + accessorKey: "country", + header: "Country", + }, + { + accessorKey: "total", + header: "Total", + }, ]; diff --git a/apps/analytics-web/app/_components/analytics/RegionsTable/RegionsTable.tsx b/apps/analytics-web/app/_components/analytics/RegionsTable/RegionsTable.tsx index 552c3169..f1d2cfbf 100644 --- a/apps/analytics-web/app/_components/analytics/RegionsTable/RegionsTable.tsx +++ b/apps/analytics-web/app/_components/analytics/RegionsTable/RegionsTable.tsx @@ -1,9 +1,9 @@ -import { DataTable } from '~/components/DataTable/data-table'; -import getRegionsTotals from '~/utils/getRegionsTotals'; -import { columns } from './Columns'; -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; +import { DataTable } from "~/components/DataTable/data-table"; +import getRegionsTotals from "~/utils/getRegionsTotals"; +import { columns } from "./Columns"; export default function ErrorsTable({ events }: { events: Event[] }) { - const regionsTotals = getRegionsTotals(events); - return ; + const regionsTotals = getRegionsTotals(events); + return ; } diff --git a/apps/analytics-web/app/_components/analytics/cards/TotalAppsCard.tsx b/apps/analytics-web/app/_components/analytics/cards/TotalAppsCard.tsx index 4cc3d929..9575ba9e 100644 --- a/apps/analytics-web/app/_components/analytics/cards/TotalAppsCard.tsx +++ b/apps/analytics-web/app/_components/analytics/cards/TotalAppsCard.tsx @@ -1,16 +1,16 @@ -import { getTotalAppsSetup } from '~/utils/getTotalAppsSetup'; -import { SummaryCard } from '~/components/SummaryCard'; -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; +import { SummaryCard } from "~/components/SummaryCard"; +import { getTotalAppsSetup } from "~/utils/getTotalAppsSetup"; const TotalAppsCard = ({ events }: { events: Event[] }) => { - const totalAppsSetup = getTotalAppsSetup(events); - return ( - - ); + const totalAppsSetup = getTotalAppsSetup(events); + return ( + + ); }; export default TotalAppsCard; diff --git a/apps/analytics-web/app/_components/analytics/cards/TotalDataExported.tsx b/apps/analytics-web/app/_components/analytics/cards/TotalDataExported.tsx index d9cda49a..1bab7472 100644 --- a/apps/analytics-web/app/_components/analytics/cards/TotalDataExported.tsx +++ b/apps/analytics-web/app/_components/analytics/cards/TotalDataExported.tsx @@ -1,16 +1,16 @@ -import { SummaryCard } from '~/components/SummaryCard'; -import { type Event } from '~/app/_actions/actions'; -import { getTotalDataExported } from '~/utils/getTotalDataExported'; +import type { Event } from "~/app/_actions/actions"; +import { SummaryCard } from "~/components/SummaryCard"; +import { getTotalDataExported } from "~/utils/getTotalDataExported"; const TotalDataExported = ({ events }: { events: Event[] }) => { - const totalDataExported = getTotalDataExported(events); - return ( - - ); + const totalDataExported = getTotalDataExported(events); + return ( + + ); }; export default TotalDataExported; diff --git a/apps/analytics-web/app/_components/analytics/cards/TotalErrorsCard.tsx b/apps/analytics-web/app/_components/analytics/cards/TotalErrorsCard.tsx index a5beaef3..dac7ed8c 100644 --- a/apps/analytics-web/app/_components/analytics/cards/TotalErrorsCard.tsx +++ b/apps/analytics-web/app/_components/analytics/cards/TotalErrorsCard.tsx @@ -1,16 +1,16 @@ -import { type Event } from '~/app/_actions/actions'; -import { SummaryCard } from '~/components/SummaryCard'; -import { getTotalErrors } from '~/utils/getTotalErrors'; +import type { Event } from "~/app/_actions/actions"; +import { SummaryCard } from "~/components/SummaryCard"; +import { getTotalErrors } from "~/utils/getTotalErrors"; const TotalErrorsCard = ({ events }: { events: Event[] }) => { - const totalErrors = getTotalErrors(events); - return ( - - ); + const totalErrors = getTotalErrors(events); + return ( + + ); }; export default TotalErrorsCard; diff --git a/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsCompletedCard.tsx b/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsCompletedCard.tsx index 3ceaae6c..86ec1aa9 100644 --- a/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsCompletedCard.tsx +++ b/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsCompletedCard.tsx @@ -1,16 +1,16 @@ -import { getTotalInterviewsCompleted } from '~/utils/getTotalInterviewsCompleted'; -import { SummaryCard } from '~/components/SummaryCard'; -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; +import { SummaryCard } from "~/components/SummaryCard"; +import { getTotalInterviewsCompleted } from "~/utils/getTotalInterviewsCompleted"; const TotalAppsCard = ({ events }: { events: Event[] }) => { - const totalInterviewsCompleted = getTotalInterviewsCompleted(events); - return ( - - ); + const totalInterviewsCompleted = getTotalInterviewsCompleted(events); + return ( + + ); }; export default TotalAppsCard; diff --git a/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsStartedCard.tsx b/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsStartedCard.tsx index c349f7d3..cb6cedb6 100644 --- a/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsStartedCard.tsx +++ b/apps/analytics-web/app/_components/analytics/cards/TotalInterviewsStartedCard.tsx @@ -1,16 +1,16 @@ -import { getTotalInterviewsStarted } from '~/utils/getTotalInterviewsStarted'; -import { SummaryCard } from '~/components/SummaryCard'; -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; +import { SummaryCard } from "~/components/SummaryCard"; +import { getTotalInterviewsStarted } from "~/utils/getTotalInterviewsStarted"; const TotalInterviewsStartedCard = ({ events }: { events: Event[] }) => { - const totalInterviewsStarted = getTotalInterviewsStarted(events); - return ( - - ); + const totalInterviewsStarted = getTotalInterviewsStarted(events); + return ( + + ); }; export default TotalInterviewsStartedCard; diff --git a/apps/analytics-web/app/_components/analytics/cards/TotalProtocolsInstalledCard.tsx b/apps/analytics-web/app/_components/analytics/cards/TotalProtocolsInstalledCard.tsx index 3508b7b5..894682b0 100644 --- a/apps/analytics-web/app/_components/analytics/cards/TotalProtocolsInstalledCard.tsx +++ b/apps/analytics-web/app/_components/analytics/cards/TotalProtocolsInstalledCard.tsx @@ -1,16 +1,16 @@ -import { getTotalProtocolsInstalled } from '~/utils/getTotalProtocolsInstalled'; -import { SummaryCard } from '~/components/SummaryCard'; -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; +import { SummaryCard } from "~/components/SummaryCard"; +import { getTotalProtocolsInstalled } from "~/utils/getTotalProtocolsInstalled"; const TotalProtocolsInstalledCard = ({ events }: { events: Event[] }) => { - const totalProtocolsInstalled = getTotalProtocolsInstalled(events); - return ( - - ); + const totalProtocolsInstalled = getTotalProtocolsInstalled(events); + return ( + + ); }; export default TotalProtocolsInstalledCard; diff --git a/apps/analytics-web/app/_components/users/UserManagementDialog.tsx b/apps/analytics-web/app/_components/users/UserManagementDialog.tsx index a55c9c38..8ae72e43 100644 --- a/apps/analytics-web/app/_components/users/UserManagementDialog.tsx +++ b/apps/analytics-web/app/_components/users/UserManagementDialog.tsx @@ -1,30 +1,30 @@ -import { Button } from '~/components/ui/button'; +import { Users as UsersIcon } from "lucide-react"; +import { Button } from "~/components/ui/button"; import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '~/components/ui/dialog'; -import { Users as UsersIcon } from 'lucide-react'; -import VerifiedUsersTable from './UsersTable/UsersTable'; + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "~/components/ui/dialog"; +import VerifiedUsersTable from "./UsersTable/UsersTable"; export default function UserManagementDialog() { - return ( - - - - - - - User Management - - View and manage verified users - - - - ); + return ( + + + + + + + User Management + + View and manage verified users + + + + ); } diff --git a/apps/analytics-web/app/_components/users/UsersTable/Columns.tsx b/apps/analytics-web/app/_components/users/UsersTable/Columns.tsx index 5522ac37..08c95ec2 100644 --- a/apps/analytics-web/app/_components/users/UsersTable/Columns.tsx +++ b/apps/analytics-web/app/_components/users/UsersTable/Columns.tsx @@ -1,40 +1,35 @@ -'use client'; -import { type ColumnDef } from '@tanstack/react-table'; -import VerifyUserSwitch from './VerifyUserSwitch'; +"use client"; +import type { ColumnDef } from "@tanstack/react-table"; +import VerifyUserSwitch from "./VerifyUserSwitch"; type UserColumn = ColumnDef< - { - id: string; - fullName: string; - username: string | null; - verified: boolean; - }, - unknown + { + id: string; + fullName: string; + username: string | null; + verified: boolean; + }, + unknown >; export const columns: UserColumn[] = [ - { - accessorKey: 'user', - header: 'User', - cell: ({ row }) => { - return ( -
-
{row.original.fullName}
-
{row.original.username}
-
- ); - }, - }, - { - accessorKey: 'verified', - header: 'Verified', - cell: ({ row }) => { - return ( - - ); - }, - }, + { + accessorKey: "user", + header: "User", + cell: ({ row }) => { + return ( +
+
{row.original.fullName}
+
{row.original.username}
+
+ ); + }, + }, + { + accessorKey: "verified", + header: "Verified", + cell: ({ row }) => { + return ; + }, + }, ]; diff --git a/apps/analytics-web/app/_components/users/UsersTable/UsersTable.tsx b/apps/analytics-web/app/_components/users/UsersTable/UsersTable.tsx index f6657297..a78b1ec3 100644 --- a/apps/analytics-web/app/_components/users/UsersTable/UsersTable.tsx +++ b/apps/analytics-web/app/_components/users/UsersTable/UsersTable.tsx @@ -1,19 +1,19 @@ -import { DataTable } from '~/components/DataTable/data-table'; -import { columns } from './Columns'; -import { clerkClient } from '@clerk/nextjs/server'; +import { clerkClient } from "@clerk/nextjs/server"; +import { DataTable } from "~/components/DataTable/data-table"; +import { columns } from "./Columns"; export default async function VerifiedUsersTable() { - const client = await clerkClient(); - const clerkUsers = await client.users.getUserList(); + const client = await clerkClient(); + const clerkUsers = await client.users.getUserList(); - const users = clerkUsers.data.map((user) => { - return { - id: user.id, - fullName: user.firstName + ' ' + user.lastName, - username: user.username, - verified: !!user.publicMetadata.verified, - }; - }); + const users = clerkUsers.data.map((user) => { + return { + id: user.id, + fullName: user.firstName + " " + user.lastName, + username: user.username, + verified: !!user.publicMetadata.verified, + }; + }); - return ; + return ; } diff --git a/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx b/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx index ab7c22d4..fdb16bc1 100644 --- a/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx +++ b/apps/analytics-web/app/_components/users/UsersTable/VerifyUserSwitch.tsx @@ -1,41 +1,38 @@ -import { useState } from 'react'; -import { Switch } from '~/components/ui/switch'; +import { useState } from "react"; +import { Switch } from "~/components/ui/switch"; type VerifyUserSwitchProps = { - id: string; - verified: boolean; + id: string; + verified: boolean; }; -export default function VerifyUserSwitch({ - id, - verified: initialVerified, -}: VerifyUserSwitchProps) { - const [localVerified, setLocalVerified] = useState(initialVerified); +export default function VerifyUserSwitch({ id, verified: initialVerified }: VerifyUserSwitchProps) { + const [localVerified, setLocalVerified] = useState(initialVerified); - const updateMetadata = async () => { - try { - const response = await fetch('/api/clerk', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ userId: id, verified: !localVerified }), - }); + const updateMetadata = async () => { + try { + const response = await fetch("/api/clerk", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ userId: id, verified: !localVerified }), + }); - if (!response.ok) { - setLocalVerified(!localVerified); - console.error('Database update failed.'); - } - } catch (error) { - setLocalVerified; - console.error('Error updating database:', error); - } - }; + if (!response.ok) { + setLocalVerified(!localVerified); + console.error("Database update failed."); + } + } catch (error) { + setLocalVerified; + console.error("Error updating database:", error); + } + }; - const handleToggle = async () => { - setLocalVerified(!localVerified); - await updateMetadata(); - }; + const handleToggle = async () => { + setLocalVerified(!localVerified); + await updateMetadata(); + }; - return ; + return ; } diff --git a/apps/analytics-web/app/api/clerk/route.ts b/apps/analytics-web/app/api/clerk/route.ts index c039d6f0..38bd1768 100644 --- a/apps/analytics-web/app/api/clerk/route.ts +++ b/apps/analytics-web/app/api/clerk/route.ts @@ -1,33 +1,30 @@ -import { clerkClient } from '@clerk/nextjs/server'; -import { type NextRequest, NextResponse } from 'next/server'; -import z from 'zod'; +import { clerkClient } from "@clerk/nextjs/server"; +import { type NextRequest, NextResponse } from "next/server"; +import z from "zod"; const clerkPayloadSchema = z.object({ - verified: z.boolean(), - userId: z.string(), + verified: z.boolean(), + userId: z.string(), }); export async function POST(request: NextRequest) { - const payload: unknown = await request.json(); + const payload: unknown = await request.json(); - const parsedPayload = clerkPayloadSchema.safeParse(payload); + const parsedPayload = clerkPayloadSchema.safeParse(payload); - if (!parsedPayload.success) { - return NextResponse.json( - { error: 'Invalid clerk payload' }, - { status: 400 }, - ); - } + if (!parsedPayload.success) { + return NextResponse.json({ error: "Invalid clerk payload" }, { status: 400 }); + } - const { verified, userId } = parsedPayload.data; + const { verified, userId } = parsedPayload.data; - const client = await clerkClient(); + const client = await clerkClient(); - await client.users.updateUserMetadata(userId, { - publicMetadata: { - verified, - }, - }); + await client.users.updateUserMetadata(userId, { + publicMetadata: { + verified, + }, + }); - return NextResponse.json({ success: true }); + return NextResponse.json({ success: true }); } diff --git a/apps/analytics-web/app/api/event/route.test.ts b/apps/analytics-web/app/api/event/route.test.ts index 641daeaa..8442d33e 100644 --- a/apps/analytics-web/app/api/event/route.test.ts +++ b/apps/analytics-web/app/api/event/route.test.ts @@ -1,84 +1,84 @@ -import { testApiHandler } from 'next-test-api-route-handler'; -import { describe, expect, vi, it, afterEach } from 'vitest'; -import * as appHandler from './route'; -import { type analyticsEvent } from '@codaco/analytics'; +import type { analyticsEvent } from "@codaco/analytics"; +import { testApiHandler } from "next-test-api-route-handler"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import * as appHandler from "./route"; -vi.mock('~/app/_actions/actions', () => { - return { - insertEvent: (eventData: unknown) => ({ data: eventData, error: null }), - }; +vi.mock("~/app/_actions/actions", () => { + return { + insertEvent: (eventData: unknown) => ({ data: eventData, error: null }), + }; }); -describe('/api/event', () => { - afterEach(() => { - vi.resetAllMocks(); - }); - it('should insert a valid event to the database', async () => { - const eventData: analyticsEvent = { - type: 'AppSetup', - metadata: { - details: 'testing details', - path: 'testing path', - }, - countryISOCode: 'US', - installationId: '21321546453213123', - timestamp: new Date().toString(), - }; +describe("/api/event", () => { + afterEach(() => { + vi.resetAllMocks(); + }); + it("should insert a valid event to the database", async () => { + const eventData: analyticsEvent = { + type: "AppSetup", + metadata: { + details: "testing details", + path: "testing path", + }, + countryISOCode: "US", + installationId: "21321546453213123", + timestamp: new Date().toString(), + }; - await testApiHandler({ - appHandler, - test: async ({ fetch }) => { - const response = await fetch({ - method: 'POST', - body: JSON.stringify(eventData), - }); - expect(response.status).toBe(200); - expect(await response.json()).toEqual({ event: eventData }); - }, - }); - }); + await testApiHandler({ + appHandler, + test: async ({ fetch }) => { + const response = await fetch({ + method: "POST", + body: JSON.stringify(eventData), + }); + expect(response.status).toBe(200); + expect(await response.json()).toEqual({ event: eventData }); + }, + }); + }); - it('should insert a valid error into the database', async () => { - const eventData: analyticsEvent = { - type: 'Error', - name: 'TestError', - message: 'Test message', - stack: 'Test stack', - metadata: { - details: 'testing details', - path: 'testing path', - }, - countryISOCode: 'US', - installationId: '21321546453213123', - timestamp: new Date().toString(), - }; + it("should insert a valid error into the database", async () => { + const eventData: analyticsEvent = { + type: "Error", + name: "TestError", + message: "Test message", + stack: "Test stack", + metadata: { + details: "testing details", + path: "testing path", + }, + countryISOCode: "US", + installationId: "21321546453213123", + timestamp: new Date().toString(), + }; - await testApiHandler({ - appHandler, - test: async ({ fetch }) => { - const response = await fetch({ - method: 'POST', - body: JSON.stringify(eventData), - }); - expect(response.status).toBe(200); - }, - }); - }); + await testApiHandler({ + appHandler, + test: async ({ fetch }) => { + const response = await fetch({ + method: "POST", + body: JSON.stringify(eventData), + }); + expect(response.status).toBe(200); + }, + }); + }); - it('should return 400 if event is invalid', async () => { - const eventData = { - type: 'InvalidEvent', - }; + it("should return 400 if event is invalid", async () => { + const eventData = { + type: "InvalidEvent", + }; - await testApiHandler({ - appHandler, - test: async ({ fetch }) => { - const response = await fetch({ - method: 'POST', - body: JSON.stringify(eventData), - }); - expect(response.status).toBe(400); - }, - }); - }); + await testApiHandler({ + appHandler, + test: async ({ fetch }) => { + const response = await fetch({ + method: "POST", + body: JSON.stringify(eventData), + }); + expect(response.status).toBe(400); + }, + }); + }); }); diff --git a/apps/analytics-web/app/api/event/route.ts b/apps/analytics-web/app/api/event/route.ts index f68a7c7a..75fa8c79 100644 --- a/apps/analytics-web/app/api/event/route.ts +++ b/apps/analytics-web/app/api/event/route.ts @@ -1,47 +1,41 @@ -import { type NextRequest, NextResponse } from 'next/server'; -import { AnalyticsEventSchema } from '@codaco/analytics'; -import { insertEvent } from '~/app/_actions/actions'; +import { AnalyticsEventSchema } from "@codaco/analytics"; +import { type NextRequest, NextResponse } from "next/server"; +import { insertEvent } from "~/app/_actions/actions"; // Allow CORS requests from anywhere. const corsHeaders = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'POST, OPTIONS', - 'Access-Control-Allow-Headers': 'Content-Type, Authorization', + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "POST, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type, Authorization", }; -export const runtime = 'edge'; +export const runtime = "edge"; export async function POST(request: NextRequest) { - const event = (await request.json()) as unknown; - const parsedEvent = AnalyticsEventSchema.safeParse(event); - - if (!parsedEvent.success) { - return NextResponse.json( - { error: 'Invalid event' }, - { status: 400, headers: corsHeaders }, - ); - } - - const formattedEvent = { - ...parsedEvent.data, - timestamp: new Date(parsedEvent.data.timestamp), // Convert back into a date object - }; - - const result = await insertEvent(formattedEvent); - - if (result.error) { - return NextResponse.json( - { error: 'Error inserting events' }, - { status: 500, headers: corsHeaders }, - ); - } - - return NextResponse.json({ event }, { status: 200, headers: corsHeaders }); + const event = (await request.json()) as unknown; + const parsedEvent = AnalyticsEventSchema.safeParse(event); + + if (!parsedEvent.success) { + return NextResponse.json({ error: "Invalid event" }, { status: 400, headers: corsHeaders }); + } + + const formattedEvent = { + ...parsedEvent.data, + timestamp: new Date(parsedEvent.data.timestamp), // Convert back into a date object + }; + + const result = await insertEvent(formattedEvent); + + if (result.error) { + return NextResponse.json({ error: "Error inserting events" }, { status: 500, headers: corsHeaders }); + } + + return NextResponse.json({ event }, { status: 200, headers: corsHeaders }); } export function OPTIONS() { - return new NextResponse(null, { - status: 200, - headers: corsHeaders, - }); + return new NextResponse(null, { + status: 200, + headers: corsHeaders, + }); } diff --git a/apps/analytics-web/app/globals.css b/apps/analytics-web/app/globals.css index 59d83e7b..89389cbd 100644 --- a/apps/analytics-web/app/globals.css +++ b/apps/analytics-web/app/globals.css @@ -3,61 +3,60 @@ @tailwind utilities; @layer base { - :root { - /* Semantic slots */ - --background: var(--platinum); - --foreground: var(--cyber-grape); + :root { + /* Semantic slots */ + --background: var(--platinum); + --foreground: var(--cyber-grape); - --primary: var(--cyber-grape); - --primary-foreground: var(--white); + --primary: var(--cyber-grape); + --primary-foreground: var(--white); - --secondary: var(--neon-coral); - --secondary-foreground: var(--white); + --secondary: var(--neon-coral); + --secondary-foreground: var(--white); - --muted: var(--platinum); - --muted-foreground: var(--cyber-grape-hue) - calc(var(--cyber-grape-saturation) - 10%) - calc(var(--cyber-grape-lightness) - 10%); + --muted: var(--platinum); + --muted-foreground: var(--cyber-grape-hue) calc(var(--cyber-grape-saturation) - 10%) + calc(var(--cyber-grape-lightness) - 10%); - --accent: var(--slate-blue); - --accent-foreground: var(--white); + --accent: var(--slate-blue); + --accent-foreground: var(--white); - --destructive: var(--tomato); - --destructive-foreground: var(--white); + --destructive: var(--tomato); + --destructive-foreground: var(--white); - --warning: var(--neon-carrot); - --warning-foreground: var(--white); + --warning: var(--neon-carrot); + --warning-foreground: var(--white); - --info: var(--cerulean-blue); - --info-foreground: var(--white); + --info: var(--cerulean-blue); + --info-foreground: var(--white); - --success: var(--sea-green); - --success-foreground: var(--white); + --success: var(--sea-green); + --success-foreground: var(--white); - --border: var(--platinum--dark); + --border: var(--platinum--dark); - --link: var(--neon-coral); + --link: var(--neon-coral); - --card: 0 0% 100%; + --card: 0 0% 100%; - --panel: var(--platinum); + --panel: var(--platinum); - --input: 0 0% 100%; - --input-foreground: var(--cyber-grape); + --input: 0 0% 100%; + --input-foreground: var(--cyber-grape); - --popover: var(--white); - --popover-foreground: var(--foreground); - } + --popover: var(--white); + --popover-foreground: var(--foreground); + } } @layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } - code { - @apply text-sm; - } + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } + code { + @apply text-sm; + } } diff --git a/apps/analytics-web/app/layout.tsx b/apps/analytics-web/app/layout.tsx index a245eb8d..f3213694 100644 --- a/apps/analytics-web/app/layout.tsx +++ b/apps/analytics-web/app/layout.tsx @@ -1,26 +1,26 @@ -import type { Metadata } from 'next'; -import { Inter } from 'next/font/google'; -import '@codaco/tailwind-config/globals.css'; -import './globals.css'; -import { ClerkProvider } from '@clerk/nextjs'; +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import "@codaco/tailwind-config/globals.css"; +import "./globals.css"; +import { ClerkProvider } from "@clerk/nextjs"; -const inter = Inter({ subsets: ['latin'] }); +const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { - title: 'Fresco Analytics ', - description: 'This is the analytics dashboard for Fresco.', + title: "Fresco Analytics ", + description: "This is the analytics dashboard for Fresco.", }; export default function RootLayout({ - children, + children, }: { - children: React.ReactNode; + children: React.ReactNode; }) { - return ( - - - {children} - - - ); + return ( + + + {children} + + + ); } diff --git a/apps/analytics-web/app/page.tsx b/apps/analytics-web/app/page.tsx index 47652f4b..61aa3c39 100644 --- a/apps/analytics-web/app/page.tsx +++ b/apps/analytics-web/app/page.tsx @@ -1,21 +1,21 @@ -import { UserButton } from '@clerk/nextjs'; -import AnalyticsView from '~/app/_components/analytics/AnalyticsView'; -import UserManagementDialog from './_components/users/UserManagementDialog'; +import { UserButton } from "@clerk/nextjs"; +import AnalyticsView from "~/app/_components/analytics/AnalyticsView"; +import UserManagementDialog from "./_components/users/UserManagementDialog"; export default function DashboardPage() { - return ( -
-
-
-

Dashboard

-
- - -
-
+ return ( +
+
+
+

Dashboard

+
+ + +
+
- -
-
- ); + +
+
+ ); } diff --git a/apps/analytics-web/app/verification/page.tsx b/apps/analytics-web/app/verification/page.tsx index c7a32d18..653c3c25 100644 --- a/apps/analytics-web/app/verification/page.tsx +++ b/apps/analytics-web/app/verification/page.tsx @@ -1,22 +1,22 @@ -'use client'; -import { UserButton, useUser } from '@clerk/nextjs'; -import { redirect } from 'next/navigation'; +"use client"; +import { UserButton, useUser } from "@clerk/nextjs"; +import { redirect } from "next/navigation"; export default function Verification() { - const { user } = useUser(); - const isVerified = user?.publicMetadata?.verified; - if (isVerified) { - redirect('/'); - } + const { user } = useUser(); + const isVerified = user?.publicMetadata?.verified; + if (isVerified) { + redirect("/"); + } - return ( -
-
-

User Unverified

-

Please contact the site administrator to be verified.

-
+ return ( +
+
+

User Unverified

+

Please contact the site administrator to be verified.

+
- -
- ); + +
+ ); } diff --git a/apps/analytics-web/components.json b/apps/analytics-web/components.json index eb7a42e3..ee2d7424 100644 --- a/apps/analytics-web/components.json +++ b/apps/analytics-web/components.json @@ -1,16 +1,16 @@ { - "$schema": "https://ui.shadcn.com/schema.json", - "style": "default", - "rsc": true, - "tsx": true, - "tailwind": { - "config": "tailwind.config.ts", - "css": "app/globals.css", - "baseColor": "slate", - "cssVariables": true - }, - "aliases": { - "components": "~/components", - "utils": "~/utils/shadcn" - } + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "app/globals.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "~/components", + "utils": "~/utils/shadcn" + } } diff --git a/apps/analytics-web/components/DataTable/column-header.tsx b/apps/analytics-web/components/DataTable/column-header.tsx index 0aaa345d..0d6d74b7 100644 --- a/apps/analytics-web/components/DataTable/column-header.tsx +++ b/apps/analytics-web/components/DataTable/column-header.tsx @@ -1,63 +1,55 @@ -import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react'; -import { type Column } from '@tanstack/react-table'; +import type { Column } from "@tanstack/react-table"; +import { ArrowDown, ArrowUp, ArrowUpDown } from "lucide-react"; -import { Button } from '~/components/ui/button'; +import { Button } from "~/components/ui/button"; import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from '~/components/ui/dropdown-menu'; -import { cn } from '~/utils/shadcn'; + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "~/components/ui/dropdown-menu"; +import { cn } from "~/utils/shadcn"; type DataTableColumnHeaderProps = { - column: Column; - title?: string; + column: Column; + title?: string; } & React.HTMLAttributes; export function DataTableColumnHeader({ - column, - title, - className, + column, + title, + className, }: DataTableColumnHeaderProps) { - if (!column.getCanSort()) { - return
{title}
; - } + if (!column.getCanSort()) { + return
{title}
; + } - return ( -
- - - - - - column.toggleSorting(false)}> - - Asc - - column.toggleSorting(true)}> - - Desc - - - -
- ); + return ( +
+ + + + + + column.toggleSorting(false)}> + + Asc + + column.toggleSorting(true)}> + + Desc + + + +
+ ); } diff --git a/apps/analytics-web/components/DataTable/data-table-pagination.tsx b/apps/analytics-web/components/DataTable/data-table-pagination.tsx index 6c779cb7..78aea09a 100644 --- a/apps/analytics-web/components/DataTable/data-table-pagination.tsx +++ b/apps/analytics-web/components/DataTable/data-table-pagination.tsx @@ -1,98 +1,84 @@ -import { - ChevronLeft, - ChevronRight, - ChevronsLeft, - ChevronsRight, -} from 'lucide-react'; +import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "lucide-react"; -import { type Table } from '@tanstack/react-table'; +import type { Table } from "@tanstack/react-table"; -import { Button } from '~/components/ui/button'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '~/components/ui/select'; +import { Button } from "~/components/ui/button"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "~/components/ui/select"; type DataTablePaginationProps = { - table: Table; + table: Table; }; -export function DataTablePagination({ - table, -}: DataTablePaginationProps) { - return ( -
- {/*
+export function DataTablePagination({ table }: DataTablePaginationProps) { + return ( +
+ {/*
{table.getFilteredSelectedRowModel().rows.length} of{" "} {table.getFilteredRowModel().rows.length} row(s) selected.
*/} -
-
-

Rows per page

- -
-
- Page {table.getState().pagination.pageIndex + 1} of{' '} - {table.getPageCount()} -
-
- - - - -
-
-
- ); +
+
+

Rows per page

+ +
+
+ Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()} +
+
+ + + + +
+
+
+ ); } diff --git a/apps/analytics-web/components/DataTable/data-table.tsx b/apps/analytics-web/components/DataTable/data-table.tsx index 42ef0572..faa590fa 100644 --- a/apps/analytics-web/components/DataTable/data-table.tsx +++ b/apps/analytics-web/components/DataTable/data-table.tsx @@ -1,96 +1,75 @@ -'use client'; +"use client"; import { - type ColumnDef, - type SortingState, - flexRender, - getCoreRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable, -} from '@tanstack/react-table'; + type ColumnDef, + type SortingState, + flexRender, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '~/components/ui/table'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "~/components/ui/table"; type DataTableProps = { - columns: ColumnDef[]; - data: TData[]; - pagination?: boolean; + columns: ColumnDef[]; + data: TData[]; + pagination?: boolean; }; -import { DataTablePagination } from '~/components/DataTable/data-table-pagination'; -import { useState } from 'react'; +import { useState } from "react"; +import { DataTablePagination } from "~/components/DataTable/data-table-pagination"; -export function DataTable({ - columns, - data, - pagination, -}: DataTableProps) { - const [sorting, setSorting] = useState([]); - const table = useReactTable({ - data, - columns, - getCoreRowModel: getCoreRowModel(), - getPaginationRowModel: getPaginationRowModel(), - onSortingChange: setSorting, - getSortedRowModel: getSortedRowModel(), - state: { - sorting, - }, - }); +export function DataTable({ columns, data, pagination }: DataTableProps) { + const [sorting, setSorting] = useState([]); + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + state: { + sorting, + }, + }); - return ( -
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.header, - header.getContext(), - )} - - ); - })} - - ))} - - - {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row) => ( - - {row.getVisibleCells().map((cell) => ( - - {flexRender(cell.column.columnDef.cell, cell.getContext())} - - ))} - - )) - ) : ( - - - No results. - - - )} - -
- {pagination && } -
- ); + return ( +
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())} + + ); + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + {flexRender(cell.column.columnDef.cell, cell.getContext())} + ))} + + )) + ) : ( + + + No results. + + + )} + +
+ {pagination && } +
+ ); } diff --git a/apps/analytics-web/components/DialogButton.tsx b/apps/analytics-web/components/DialogButton.tsx index daeebb90..3ad05235 100644 --- a/apps/analytics-web/components/DialogButton.tsx +++ b/apps/analytics-web/components/DialogButton.tsx @@ -1,41 +1,36 @@ -import { type ReactNode } from 'react'; -import { Button } from '~/components/ui/button'; +import type { ReactNode } from "react"; +import { Button } from "~/components/ui/button"; import { - Dialog, - DialogContent, - DialogHeader, - DialogDescription, - DialogTitle, - DialogTrigger, -} from '~/components/ui/dialog'; + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "~/components/ui/dialog"; type DialogButtonProps = { - buttonLabel: string; - title: string; - description: string; - content: ReactNode; + buttonLabel: string; + title: string; + description: string; + content: ReactNode; }; -export function DialogButton({ - buttonLabel, - title, - description, - content, -}: DialogButtonProps) { - return ( - - - - - - - {title} - - {description} -
- {content} -
-
-
- ); +export function DialogButton({ buttonLabel, title, description, content }: DialogButtonProps) { + return ( + + + + + + + {title} + + {description} +
+ {content} +
+
+
+ ); } diff --git a/apps/analytics-web/components/ExportButton.tsx b/apps/analytics-web/components/ExportButton.tsx index 5a4da9e9..b834a9d0 100644 --- a/apps/analytics-web/components/ExportButton.tsx +++ b/apps/analytics-web/components/ExportButton.tsx @@ -1,38 +1,38 @@ -'use client'; +"use client"; -import { Download } from 'lucide-react'; -import Papa from 'papaparse'; -import { type Event } from '~/app/_actions/actions'; -import { Button } from '~/components/ui/button'; +import { Download } from "lucide-react"; +import Papa from "papaparse"; +import type { Event } from "~/app/_actions/actions"; +import { Button } from "~/components/ui/button"; type ExportButtonProps = { - data: Event[]; - filename: string; + data: Event[]; + filename: string; }; const ExportButton: React.FC = ({ data, filename }) => { - const handleExportCSV = () => { - const csvData = Papa.unparse(data); + const handleExportCSV = () => { + const csvData = Papa.unparse(data); - const blob = new Blob([csvData], { type: 'text/csv;charset=utf-8;' }); + const blob = new Blob([csvData], { type: "text/csv;charset=utf-8;" }); - const link = document.createElement('a'); - if (link.download !== undefined) { - const url = URL.createObjectURL(blob); - link.setAttribute('href', url); - link.setAttribute('download', filename); - link.style.visibility = 'hidden'; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } - }; + const link = document.createElement("a"); + if (link.download !== undefined) { + const url = URL.createObjectURL(blob); + link.setAttribute("href", url); + link.setAttribute("download", filename); + link.style.visibility = "hidden"; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + }; - return ( - - ); + return ( + + ); }; export default ExportButton; diff --git a/apps/analytics-web/components/MetadataDialog.tsx b/apps/analytics-web/components/MetadataDialog.tsx index 23ddd03d..da005b5d 100644 --- a/apps/analytics-web/components/MetadataDialog.tsx +++ b/apps/analytics-web/components/MetadataDialog.tsx @@ -1,13 +1,13 @@ -import { type Event } from '~/app/_actions/actions'; -import { DialogButton } from '~/components/DialogButton'; +import type { Event } from "~/app/_actions/actions"; +import { DialogButton } from "~/components/DialogButton"; export function MetadataDialog({ event }: { event: Event }) { - return ( - - ); + return ( + + ); } diff --git a/apps/analytics-web/components/SummaryCard.tsx b/apps/analytics-web/components/SummaryCard.tsx index 9e151d9c..8816729c 100644 --- a/apps/analytics-web/components/SummaryCard.tsx +++ b/apps/analytics-web/components/SummaryCard.tsx @@ -1,27 +1,21 @@ -import { Card, CardHeader, CardTitle, CardContent } from '~/components/ui/card'; +import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; type SummaryCardProps = { - title: string; - value: number; - description?: string; + title: string; + value: number; + description?: string; }; -export const SummaryCard = ({ - title, - value, - description, -}: SummaryCardProps) => { - return ( - - - {title} - - -
{value}
- {description && ( -

{description}

- )} -
-
- ); +export const SummaryCard = ({ title, value, description }: SummaryCardProps) => { + return ( + + + {title} + + +
{value}
+ {description &&

{description}

} +
+
+ ); }; diff --git a/apps/analytics-web/components/ui/badge.tsx b/apps/analytics-web/components/ui/badge.tsx index f0950752..25a103fe 100644 --- a/apps/analytics-web/components/ui/badge.tsx +++ b/apps/analytics-web/components/ui/badge.tsx @@ -1,36 +1,29 @@ -import * as React from 'react'; -import { cva, type VariantProps } from 'class-variance-authority'; +import { type VariantProps, cva } from "class-variance-authority"; +import type * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const badgeVariants = cva( - 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', - { - variants: { - variant: { - default: - 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80', - secondary: - 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80', - destructive: - 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80', - outline: 'text-foreground', - }, - }, - defaultVariants: { - variant: 'default', - }, - }, + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, ); -export type BadgeProps = object & - React.HTMLAttributes & - VariantProps; +export type BadgeProps = object & React.HTMLAttributes & VariantProps; function Badge({ className, variant, ...props }: BadgeProps) { - return ( -
- ); + return
; } export { Badge, badgeVariants }; diff --git a/apps/analytics-web/components/ui/button.tsx b/apps/analytics-web/components/ui/button.tsx index f64f15c1..b21dc584 100644 --- a/apps/analytics-web/components/ui/button.tsx +++ b/apps/analytics-web/components/ui/button.tsx @@ -1,55 +1,46 @@ -import * as React from 'react'; -import { Slot } from '@radix-ui/react-slot'; -import { cva, type VariantProps } from 'class-variance-authority'; +import { Slot } from "@radix-ui/react-slot"; +import { type VariantProps, cva } from "class-variance-authority"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const buttonVariants = cva( - 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50', - { - variants: { - variant: { - default: 'bg-primary text-primary-foreground hover:bg-primary/90', - destructive: - 'bg-destructive text-destructive-foreground hover:bg-destructive/90', - outline: - 'border border-input bg-background hover:bg-accent hover:text-accent-foreground', - secondary: - 'bg-secondary text-secondary-foreground hover:bg-secondary/80', - ghost: 'hover:bg-accent hover:text-accent-foreground', - link: 'text-primary underline-offset-4 hover:underline', - }, - size: { - default: 'h-10 px-4 py-2', - sm: 'h-9 rounded-md px-3', - lg: 'h-11 rounded-md px-8', - icon: 'h-10 w-10', - }, - }, - defaultVariants: { - variant: 'default', - size: 'default', - }, - }, + "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, ); export type ButtonProps = { - asChild?: boolean; + asChild?: boolean; } & React.ButtonHTMLAttributes & - VariantProps; + VariantProps; const Button = React.forwardRef( - ({ className, variant, size, asChild = false, ...props }, ref) => { - const Comp = asChild ? Slot : 'button'; - return ( - - ); - }, + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ; + }, ); -Button.displayName = 'Button'; +Button.displayName = "Button"; export { Button, buttonVariants }; diff --git a/apps/analytics-web/components/ui/card.tsx b/apps/analytics-web/components/ui/card.tsx index 1a97fad9..b4d70925 100644 --- a/apps/analytics-web/components/ui/card.tsx +++ b/apps/analytics-web/components/ui/card.tsx @@ -1,88 +1,45 @@ -import * as React from 'react'; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; -const Card = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
+const Card = React.forwardRef>(({ className, ...props }, ref) => ( +
)); -Card.displayName = 'Card'; - -const CardHeader = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)); -CardHeader.displayName = 'CardHeader'; - -const CardTitle = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(({ className, children, ...props }, ref) => ( -

- {children} -

-)); -CardTitle.displayName = 'CardTitle'; - -const CardDescription = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -

-)); -CardDescription.displayName = 'CardDescription'; - -const CardContent = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -

-)); -CardContent.displayName = 'CardContent'; - -const CardFooter = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)); -CardFooter.displayName = 'CardFooter'; - -export { - Card, - CardHeader, - CardFooter, - CardTitle, - CardDescription, - CardContent, -}; +Card.displayName = "Card"; + +const CardHeader = React.forwardRef>( + ({ className, ...props }, ref) => ( +
+ ), +); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef>( + ({ className, children, ...props }, ref) => ( +

+ {children} +

+ ), +); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef>( + ({ className, ...props }, ref) => ( +

+ ), +); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef>( + ({ className, ...props }, ref) =>

, +); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef>( + ({ className, ...props }, ref) => ( +
+ ), +); +CardFooter.displayName = "CardFooter"; + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }; diff --git a/apps/analytics-web/components/ui/checkbox.tsx b/apps/analytics-web/components/ui/checkbox.tsx index 917b7100..0503d0f6 100644 --- a/apps/analytics-web/components/ui/checkbox.tsx +++ b/apps/analytics-web/components/ui/checkbox.tsx @@ -1,29 +1,27 @@ -'use client'; +"use client"; -import * as React from 'react'; -import * as CheckboxPrimitive from '@radix-ui/react-checkbox'; -import { Check } from 'lucide-react'; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import { Check } from "lucide-react"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const Checkbox = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - - - - - + + + + + )); Checkbox.displayName = CheckboxPrimitive.Root.displayName; diff --git a/apps/analytics-web/components/ui/dialog.tsx b/apps/analytics-web/components/ui/dialog.tsx index 44dab426..5b3ffed9 100644 --- a/apps/analytics-web/components/ui/dialog.tsx +++ b/apps/analytics-web/components/ui/dialog.tsx @@ -1,10 +1,10 @@ -'use client'; +"use client"; -import * as React from 'react'; -import * as DialogPrimitive from '@radix-ui/react-dialog'; -import { X } from 'lucide-react'; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const Dialog = DialogPrimitive.Root; @@ -15,108 +15,83 @@ const DialogPortal = DialogPrimitive.Portal; const DialogClose = DialogPrimitive.Close; const DialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const DialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - - {children} - - - Close - - - + + + + {children} + + + Close + + + )); DialogContent.displayName = DialogPrimitive.Content.displayName; -const DialogHeader = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
+const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
); -DialogHeader.displayName = 'DialogHeader'; +DialogHeader.displayName = "DialogHeader"; -const DialogFooter = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
+const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
); -DialogFooter.displayName = 'DialogFooter'; +DialogFooter.displayName = "DialogFooter"; const DialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); DialogTitle.displayName = DialogPrimitive.Title.displayName; const DialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); DialogDescription.displayName = DialogPrimitive.Description.displayName; export { - Dialog, - DialogPortal, - DialogOverlay, - DialogClose, - DialogTrigger, - DialogContent, - DialogHeader, - DialogFooter, - DialogTitle, - DialogDescription, + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, }; diff --git a/apps/analytics-web/components/ui/dropdown-menu.tsx b/apps/analytics-web/components/ui/dropdown-menu.tsx index 6f2f4ac6..bcbe2113 100644 --- a/apps/analytics-web/components/ui/dropdown-menu.tsx +++ b/apps/analytics-web/components/ui/dropdown-menu.tsx @@ -1,10 +1,10 @@ -'use client'; +"use client"; -import * as React from 'react'; -import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; -import { Check, ChevronRight, Circle } from 'lucide-react'; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { Check, ChevronRight, Circle } from "lucide-react"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const DropdownMenu = DropdownMenuPrimitive.Root; @@ -19,182 +19,163 @@ const DropdownMenuSub = DropdownMenuPrimitive.Sub; const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; const DropdownMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean; - } + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } >(({ className, inset, children, ...props }, ref) => ( - - {children} - - + + {children} + + )); -DropdownMenuSubTrigger.displayName = - DropdownMenuPrimitive.SubTrigger.displayName; +DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; const DropdownMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); -DropdownMenuSubContent.displayName = - DropdownMenuPrimitive.SubContent.displayName; +DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; const DropdownMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, sideOffset = 4, ...props }, ref) => ( - - - + + + )); DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; const DropdownMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean; - } + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } >(({ className, inset, ...props }, ref) => ( - + )); DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; const DropdownMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - + + + + + + + {children} + )); -DropdownMenuCheckboxItem.displayName = - DropdownMenuPrimitive.CheckboxItem.displayName; +DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName; const DropdownMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - - - - - {children} - + + + + + + + {children} + )); DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; const DropdownMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean; - } + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } >(({ className, inset, ...props }, ref) => ( - + )); DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; const DropdownMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; -const DropdownMenuShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( - - ); +const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return ; }; -DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'; +DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; export { - DropdownMenu, - DropdownMenuTrigger, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuCheckboxItem, - DropdownMenuRadioItem, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuGroup, - DropdownMenuPortal, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuRadioGroup, + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, }; diff --git a/apps/analytics-web/components/ui/select.tsx b/apps/analytics-web/components/ui/select.tsx index 3115f71c..e433e3b2 100644 --- a/apps/analytics-web/components/ui/select.tsx +++ b/apps/analytics-web/components/ui/select.tsx @@ -1,10 +1,10 @@ -'use client'; +"use client"; -import * as React from 'react'; -import * as SelectPrimitive from '@radix-ui/react-select'; -import { Check, ChevronDown } from 'lucide-react'; +import * as SelectPrimitive from "@radix-ui/react-select"; +import { Check, ChevronDown } from "lucide-react"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const Select = SelectPrimitive.Root; @@ -13,109 +13,92 @@ const SelectGroup = SelectPrimitive.Group; const SelectValue = SelectPrimitive.Value; const SelectTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - {children} - - - - + + {children} + + + + )); SelectTrigger.displayName = SelectPrimitive.Trigger.displayName; const SelectContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, position = 'popper', ...props }, ref) => ( - - - - {children} - - - + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = "popper", ...props }, ref) => ( + + + + {children} + + + )); SelectContent.displayName = SelectPrimitive.Content.displayName; const SelectLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); SelectLabel.displayName = SelectPrimitive.Label.displayName; const SelectItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - - - - + + + + + + - {children} - + {children} + )); SelectItem.displayName = SelectPrimitive.Item.displayName; const SelectSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); SelectSeparator.displayName = SelectPrimitive.Separator.displayName; -export { - Select, - SelectGroup, - SelectValue, - SelectTrigger, - SelectContent, - SelectLabel, - SelectItem, - SelectSeparator, -}; +export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator }; diff --git a/apps/analytics-web/components/ui/switch.tsx b/apps/analytics-web/components/ui/switch.tsx index 434dc624..a0907779 100644 --- a/apps/analytics-web/components/ui/switch.tsx +++ b/apps/analytics-web/components/ui/switch.tsx @@ -1,28 +1,28 @@ -'use client'; +"use client"; -import * as React from 'react'; -import * as SwitchPrimitives from '@radix-ui/react-switch'; +import * as SwitchPrimitives from "@radix-ui/react-switch"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const Switch = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - - - + + + )); Switch.displayName = SwitchPrimitives.Root.displayName; diff --git a/apps/analytics-web/components/ui/table.tsx b/apps/analytics-web/components/ui/table.tsx index 94dcb2b7..6fc8df8e 100644 --- a/apps/analytics-web/components/ui/table.tsx +++ b/apps/analytics-web/components/ui/table.tsx @@ -1,114 +1,72 @@ -import * as React from 'react'; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; -const Table = React.forwardRef< - HTMLTableElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
- - -)); -Table.displayName = 'Table'; +const Table = React.forwardRef>( + ({ className, ...props }, ref) => ( +
+
+ + ), +); +Table.displayName = "Table"; -const TableHeader = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)); -TableHeader.displayName = 'TableHeader'; +const TableHeader = React.forwardRef>( + ({ className, ...props }, ref) => , +); +TableHeader.displayName = "TableHeader"; -const TableBody = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)); -TableBody.displayName = 'TableBody'; +const TableBody = React.forwardRef>( + ({ className, ...props }, ref) => ( + + ), +); +TableBody.displayName = "TableBody"; -const TableFooter = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)); -TableFooter.displayName = 'TableFooter'; +const TableFooter = React.forwardRef>( + ({ className, ...props }, ref) => ( + + ), +); +TableFooter.displayName = "TableFooter"; -const TableRow = React.forwardRef< - HTMLTableRowElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)); -TableRow.displayName = 'TableRow'; +const TableRow = React.forwardRef>( + ({ className, ...props }, ref) => ( + + ), +); +TableRow.displayName = "TableRow"; -const TableHead = React.forwardRef< - HTMLTableCellElement, - React.ThHTMLAttributes ->(({ className, ...props }, ref) => ( -
-)); -TableHead.displayName = 'TableHead'; +const TableHead = React.forwardRef>( + ({ className, ...props }, ref) => ( + + ), +); +TableHead.displayName = "TableHead"; -const TableCell = React.forwardRef< - HTMLTableCellElement, - React.TdHTMLAttributes ->(({ className, ...props }, ref) => ( - -)); -TableCell.displayName = 'TableCell'; +const TableCell = React.forwardRef>( + ({ className, ...props }, ref) => ( + + ), +); +TableCell.displayName = "TableCell"; -const TableCaption = React.forwardRef< - HTMLTableCaptionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)); -TableCaption.displayName = 'TableCaption'; +const TableCaption = React.forwardRef>( + ({ className, ...props }, ref) => ( + + ), +); +TableCaption.displayName = "TableCaption"; -export { - Table, - TableHeader, - TableBody, - TableFooter, - TableHead, - TableRow, - TableCell, - TableCaption, -}; +export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }; diff --git a/apps/analytics-web/components/ui/tabs.tsx b/apps/analytics-web/components/ui/tabs.tsx index 2fd908d6..e01c9cbc 100644 --- a/apps/analytics-web/components/ui/tabs.tsx +++ b/apps/analytics-web/components/ui/tabs.tsx @@ -1,54 +1,54 @@ -'use client'; +"use client"; -import * as React from 'react'; -import * as TabsPrimitive from '@radix-ui/react-tabs'; +import * as TabsPrimitive from "@radix-ui/react-tabs"; +import * as React from "react"; -import { cn } from '~/utils/shadcn'; +import { cn } from "~/utils/shadcn"; const Tabs = TabsPrimitive.Root; const TabsList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); TabsList.displayName = TabsPrimitive.List.displayName; const TabsTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; const TabsContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); TabsContent.displayName = TabsPrimitive.Content.displayName; diff --git a/apps/analytics-web/db/db.ts b/apps/analytics-web/db/db.ts index 1b4eece0..786b0b5d 100644 --- a/apps/analytics-web/db/db.ts +++ b/apps/analytics-web/db/db.ts @@ -1,7 +1,7 @@ -import { sql } from '@vercel/postgres'; -import { drizzle } from 'drizzle-orm/vercel-postgres'; -import * as schema from './schema'; -import { type eventsTable } from './schema'; +import { sql } from "@vercel/postgres"; +import { drizzle } from "drizzle-orm/vercel-postgres"; +import * as schema from "./schema"; +import type { eventsTable } from "./schema"; // Use this object to send drizzle queries to your DB export const db = drizzle(sql, { schema }); diff --git a/apps/analytics-web/db/schema.ts b/apps/analytics-web/db/schema.ts index 4d04ef12..61714a73 100644 --- a/apps/analytics-web/db/schema.ts +++ b/apps/analytics-web/db/schema.ts @@ -1,29 +1,22 @@ -import { - json, - pgTable, - serial, - text, - uniqueIndex, - timestamp, -} from 'drizzle-orm/pg-core'; +import { json, pgTable, serial, text, timestamp, uniqueIndex } from "drizzle-orm/pg-core"; export const eventsTable = pgTable( - 'events', - { - id: serial('id').primaryKey(), - type: text('type').notNull(), // Todo: make this use pgEnum with the eventTypes array. - installationId: text('installationId').notNull(), - timestamp: timestamp('timestamp').notNull(), - countryISOCode: text('countryISOCode').notNull(), - message: text('message'), - name: text('name'), - stack: text('stack'), - cause: text('cause'), - metadata: json('metadata'), - }, - (events) => { - return { - uniqueIdx: uniqueIndex('unique_idx').on(events.id), - }; - }, + "events", + { + id: serial("id").primaryKey(), + type: text("type").notNull(), // Todo: make this use pgEnum with the eventTypes array. + installationId: text("installationId").notNull(), + timestamp: timestamp("timestamp").notNull(), + countryISOCode: text("countryISOCode").notNull(), + message: text("message"), + name: text("name"), + stack: text("stack"), + cause: text("cause"), + metadata: json("metadata"), + }, + (events) => { + return { + uniqueIdx: uniqueIndex("unique_idx").on(events.id), + }; + }, ); diff --git a/apps/analytics-web/drizzle.config.ts b/apps/analytics-web/drizzle.config.ts index 30d4c6e6..973182c2 100644 --- a/apps/analytics-web/drizzle.config.ts +++ b/apps/analytics-web/drizzle.config.ts @@ -1,15 +1,15 @@ -import dotenv from 'dotenv'; +import dotenv from "dotenv"; dotenv.config(); -import { defineConfig } from 'drizzle-kit'; +import { defineConfig } from "drizzle-kit"; export default defineConfig({ - schema: './db/schema.ts', - out: './drizzle', - driver: 'pg', - dbCredentials: { - connectionString: process.env.POSTGRES_URL!, - }, - verbose: true, - strict: true, + schema: "./db/schema.ts", + out: "./drizzle", + driver: "pg", + dbCredentials: { + connectionString: process.env.POSTGRES_URL!, + }, + verbose: true, + strict: true, }); diff --git a/apps/analytics-web/drizzle/meta/0000_snapshot.json b/apps/analytics-web/drizzle/meta/0000_snapshot.json index 1fb47454..7a1d446a 100644 --- a/apps/analytics-web/drizzle/meta/0000_snapshot.json +++ b/apps/analytics-web/drizzle/meta/0000_snapshot.json @@ -1,93 +1,91 @@ { - "id": "dd5e2f22-a389-41cc-98a4-d6b3a7a3feee", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "5", - "dialect": "pg", - "tables": { - "events": { - "name": "events", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "installationId": { - "name": "installationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "timestamp": { - "name": "timestamp", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "countryISOCode": { - "name": "countryISOCode", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "message": { - "name": "message", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stack": { - "name": "stack", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cause": { - "name": "cause", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metadata": { - "name": "metadata", - "type": "json", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "unique_idx": { - "name": "unique_idx", - "columns": [ - "id" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - } - }, - "enums": {}, - "schemas": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file + "id": "dd5e2f22-a389-41cc-98a4-d6b3a7a3feee", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "5", + "dialect": "pg", + "tables": { + "events": { + "name": "events", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "installationId": { + "name": "installationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "countryISOCode": { + "name": "countryISOCode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stack": { + "name": "stack", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cause": { + "name": "cause", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "json", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "unique_idx": { + "name": "unique_idx", + "columns": ["id"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/apps/analytics-web/drizzle/meta/_journal.json b/apps/analytics-web/drizzle/meta/_journal.json index 45076fc3..8d902fb3 100644 --- a/apps/analytics-web/drizzle/meta/_journal.json +++ b/apps/analytics-web/drizzle/meta/_journal.json @@ -1,13 +1,13 @@ { - "version": "5", - "dialect": "pg", - "entries": [ - { - "idx": 0, - "version": "5", - "when": 1707131657461, - "tag": "0000_overconfident_zzzax", - "breakpoints": true - } - ] -} \ No newline at end of file + "version": "5", + "dialect": "pg", + "entries": [ + { + "idx": 0, + "version": "5", + "when": 1707131657461, + "tag": "0000_overconfident_zzzax", + "breakpoints": true + } + ] +} diff --git a/apps/analytics-web/middleware.ts b/apps/analytics-web/middleware.ts index 046d2472..6a2d2239 100644 --- a/apps/analytics-web/middleware.ts +++ b/apps/analytics-web/middleware.ts @@ -1,27 +1,23 @@ -import { - clerkClient, - clerkMiddleware, - createRouteMatcher, -} from '@clerk/nextjs/server'; -import { NextResponse } from 'next/server'; +import { clerkClient, clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server"; +import { NextResponse } from "next/server"; -const isPublicRoute = createRouteMatcher(['/verification(.*)']); +const isPublicRoute = createRouteMatcher(["/verification(.*)"]); export default clerkMiddleware(async (auth, req) => { - // Restrict admin route to users with specific role - if (!isPublicRoute(req)) { - const result = await auth.protect(); - const client = await clerkClient(); - const user = await client.users.getUser(result.userId); - const isVerified = user.publicMetadata.verified; + // Restrict admin route to users with specific role + if (!isPublicRoute(req)) { + const result = await auth.protect(); + const client = await clerkClient(); + const user = await client.users.getUser(result.userId); + const isVerified = user.publicMetadata.verified; - if (!isVerified) { - return NextResponse.redirect(new URL('/verification', req.nextUrl)); - } - } + if (!isVerified) { + return NextResponse.redirect(new URL("/verification", req.nextUrl)); + } + } }); // all routes except static files and /api/event export const config = { - matcher: ['/', '/((?!api|static|.*\\..*|_next).*)'], + matcher: ["/", "/((?!api|static|.*\\..*|_next).*)"], }; diff --git a/apps/analytics-web/next.config.js b/apps/analytics-web/next.config.js index fdb56177..72bf4213 100644 --- a/apps/analytics-web/next.config.js +++ b/apps/analytics-web/next.config.js @@ -1,15 +1,13 @@ /** @type {import("next").NextConfig} */ const config = { - reactStrictMode: true, + reactStrictMode: true, - /** Enables hot reloading for local packages without a build step */ - transpilePackages: [ - "@codaco/ui", - ], + /** Enables hot reloading for local packages without a build step */ + transpilePackages: ["@codaco/ui"], - /** We already do linting and typechecking as separate tasks in CI */ - eslint: { ignoreDuringBuilds: true }, - typescript: { ignoreBuildErrors: true }, + /** We already do linting and typechecking as separate tasks in CI */ + eslint: { ignoreDuringBuilds: true }, + typescript: { ignoreBuildErrors: true }, }; export default config; diff --git a/apps/analytics-web/package.json b/apps/analytics-web/package.json index ce3f8883..10b897c5 100644 --- a/apps/analytics-web/package.json +++ b/apps/analytics-web/package.json @@ -1,63 +1,63 @@ { - "name": "analytics-web", - "version": "1.0.0", - "private": true, - "type": "module", - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "test": "vitest run", - "test:watch": "vitest watch", - "generate": "npx drizzle-kit generate:pg", - "migrate": "npx tsx scripts/migrate.ts", - "seed": "pnpm run generate && pnpm run migrate && npx tsx scripts/seed.ts" - }, - "dependencies": { - "@clerk/nextjs": "^6.3.3", - "@codaco/analytics": "workspace:*", - "@codaco/ui": "workspace:*", - "@radix-ui/react-checkbox": "^1.1.2", - "@radix-ui/react-dialog": "^1.1.2", - "@radix-ui/react-dropdown-menu": "^2.1.2", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.1.1", - "@radix-ui/react-tabs": "^1.1.1", - "@tanstack/react-table": "^8.20.5", - "@vercel/kv": "^3.0.0", - "@vercel/postgres": "^0.10.0", - "autoprefixer": "^10.4.20", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.1", - "dotenv": "^16.4.5", - "drizzle-orm": "^0.36.1", - "i18n-iso-countries": "^7.13.0", - "lucide-react": "^0.363.0", - "next": "^14.2.18", - "papaparse": "^5.4.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "tailwind-merge": "^2.0.0", - "zod": "^3.23.8" - }, - "devDependencies": { - "@codaco/tailwind-config": "workspace:*", - "@codaco/tsconfig": "workspace:*", - "@faker-js/faker": "^8.2.0", - "@testing-library/react": "^14.1.2", - "@types/node": "^20.5.2", - "@types/papaparse": "^5.3.15", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react": "^4.3.3", - "drizzle-kit": "^0.28.0", - "jsdom": "^25.0.1", - "next-test-api-route-handler": "^4.0.14", - "tailwindcss": "^3.4.1", - "typescript": "^5.6.3", - "vite-tsconfig-paths": "^5.1.2", - "vitest": "^2.1.5" - } + "name": "analytics-web", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "test": "vitest run", + "test:watch": "vitest watch", + "generate": "npx drizzle-kit generate:pg", + "migrate": "npx tsx scripts/migrate.ts", + "seed": "pnpm run generate && pnpm run migrate && npx tsx scripts/seed.ts" + }, + "dependencies": { + "@clerk/nextjs": "^6.3.3", + "@codaco/analytics": "workspace:*", + "@codaco/ui": "workspace:*", + "@radix-ui/react-checkbox": "^1.1.2", + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-dropdown-menu": "^2.1.2", + "@radix-ui/react-select": "^2.1.2", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-tabs": "^1.1.1", + "@tanstack/react-table": "^8.20.5", + "@vercel/kv": "^3.0.0", + "@vercel/postgres": "^0.10.0", + "autoprefixer": "^10.4.20", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "dotenv": "^16.4.5", + "drizzle-orm": "^0.36.1", + "i18n-iso-countries": "^7.13.0", + "lucide-react": "^0.363.0", + "next": "^14.2.18", + "papaparse": "^5.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "tailwind-merge": "^2.0.0", + "zod": "^3.23.8" + }, + "devDependencies": { + "@codaco/tailwind-config": "workspace:*", + "@codaco/tsconfig": "workspace:*", + "@faker-js/faker": "^8.2.0", + "@testing-library/react": "^14.1.2", + "@types/node": "^20.5.2", + "@types/papaparse": "^5.3.15", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "drizzle-kit": "^0.28.0", + "jsdom": "^25.0.1", + "next-test-api-route-handler": "^4.0.14", + "tailwindcss": "^3.4.1", + "typescript": "^5.6.3", + "vite-tsconfig-paths": "^5.1.2", + "vitest": "^2.1.5" + } } diff --git a/apps/analytics-web/postcss.config.cjs b/apps/analytics-web/postcss.config.cjs index 12a703d9..e873f1a4 100644 --- a/apps/analytics-web/postcss.config.cjs +++ b/apps/analytics-web/postcss.config.cjs @@ -1,6 +1,6 @@ module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, }; diff --git a/apps/analytics-web/scripts/migrate.ts b/apps/analytics-web/scripts/migrate.ts index 61fd5001..541c5b16 100644 --- a/apps/analytics-web/scripts/migrate.ts +++ b/apps/analytics-web/scripts/migrate.ts @@ -1,15 +1,15 @@ -import dotenv from 'dotenv'; +import dotenv from "dotenv"; dotenv.config(); -import { migrate } from 'drizzle-orm/vercel-postgres/migrator'; -import { db } from '~/db/db'; +import { migrate } from "drizzle-orm/vercel-postgres/migrator"; +import { db } from "~/db/db"; export async function runMigration() { - try { - await migrate(db, { migrationsFolder: './drizzle' }); - } catch (error) { - console.error('Error running migration:', error); - } + try { + await migrate(db, { migrationsFolder: "./drizzle" }); + } catch (error) { + console.error("Error running migration:", error); + } } await runMigration(); diff --git a/apps/analytics-web/scripts/seed.ts b/apps/analytics-web/scripts/seed.ts index e482a9e4..cbdca5d7 100644 --- a/apps/analytics-web/scripts/seed.ts +++ b/apps/analytics-web/scripts/seed.ts @@ -1,64 +1,64 @@ -import dotenv from 'dotenv'; +import dotenv from "dotenv"; dotenv.config(); -import { faker } from '@faker-js/faker'; -import { db, type EventInsertType } from '~/db/db'; -import { eventsTable } from '~/db/schema'; -import { eventTypes } from '@codaco/analytics'; +import { eventTypes } from "@codaco/analytics"; +import { faker } from "@faker-js/faker"; +import { type EventInsertType, db } from "~/db/db"; +import { eventsTable } from "~/db/schema"; const installationIds: string[] = []; for (let i = 0; i < 20; i++) { - installationIds.push(faker.string.uuid()); + installationIds.push(faker.string.uuid()); } async function seedEvents() { - console.info('Starting to seed events'); + console.info("Starting to seed events"); - try { - for (let i = 0; i < 100; i++) { - const type = faker.helpers.arrayElement([...eventTypes, 'Error']); - const installationId = faker.helpers.arrayElement(installationIds); - const timestamp = faker.date.recent(); - const metadata = { - details: faker.lorem.sentence(), - path: faker.lorem.sentence(), - }; - const countryISOCode = faker.location.countryCode(); - const message = faker.lorem.sentence(); - const name = faker.lorem.sentence(); - const stack = faker.lorem.sentence(); - const cause = faker.lorem.sentence(); + try { + for (let i = 0; i < 100; i++) { + const type = faker.helpers.arrayElement([...eventTypes, "Error"]); + const installationId = faker.helpers.arrayElement(installationIds); + const timestamp = faker.date.recent(); + const metadata = { + details: faker.lorem.sentence(), + path: faker.lorem.sentence(), + }; + const countryISOCode = faker.location.countryCode(); + const message = faker.lorem.sentence(); + const name = faker.lorem.sentence(); + const stack = faker.lorem.sentence(); + const cause = faker.lorem.sentence(); - const noneErrorEvent: EventInsertType = { - type, - installationId, - timestamp, - metadata, - countryISOCode, - }; + const noneErrorEvent: EventInsertType = { + type, + installationId, + timestamp, + metadata, + countryISOCode, + }; - const errorEvent: EventInsertType = { - type, - installationId, - timestamp, - metadata, - countryISOCode, - message, - name, - stack, - cause, - }; + const errorEvent: EventInsertType = { + type, + installationId, + timestamp, + metadata, + countryISOCode, + message, + name, + stack, + cause, + }; - await db - .insert(eventsTable) - .values(type === 'Error' ? errorEvent : noneErrorEvent) - .returning(); - } - } catch (error) { - console.error('Error seeding events', error); - } + await db + .insert(eventsTable) + .values(type === "Error" ? errorEvent : noneErrorEvent) + .returning(); + } + } catch (error) { + console.error("Error seeding events", error); + } - process.exit(); + process.exit(); } await seedEvents(); diff --git a/apps/analytics-web/tailwind.config.ts b/apps/analytics-web/tailwind.config.ts index 5f3c1711..2d3cd827 100644 --- a/apps/analytics-web/tailwind.config.ts +++ b/apps/analytics-web/tailwind.config.ts @@ -1,16 +1,16 @@ -import type { Config } from 'tailwindcss'; -import sharedConfig from '@codaco/tailwind-config/fresco'; +import sharedConfig from "@codaco/tailwind-config/fresco"; +import type { Config } from "tailwindcss"; -const config: Pick = { - content: [ - ...sharedConfig.content, - './pages/**/*.{ts,tsx}', - './components/**/*.{ts,tsx}', - './app/**/*.{ts,tsx}', - './src/**/*.{ts,tsx}', - '../../packages/ui/src/**/*.{ts,tsx}', // UI package - ], - presets: [sharedConfig], +const config: Pick = { + content: [ + ...sharedConfig.content, + "./pages/**/*.{ts,tsx}", + "./components/**/*.{ts,tsx}", + "./app/**/*.{ts,tsx}", + "./src/**/*.{ts,tsx}", + "../../packages/ui/src/**/*.{ts,tsx}", // UI package + ], + presets: [sharedConfig], }; export default config; diff --git a/apps/analytics-web/tsconfig.json b/apps/analytics-web/tsconfig.json index caa490ca..a5171a64 100644 --- a/apps/analytics-web/tsconfig.json +++ b/apps/analytics-web/tsconfig.json @@ -1,17 +1,17 @@ { - "extends": "@codaco/tsconfig/base.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "~/*": ["./*"] - }, - "plugins": [ - { - "name": "next" - } - ], - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "extends": "@codaco/tsconfig/base.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "~/*": ["./*"] + }, + "plugins": [ + { + "name": "next" + } + ], + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/apps/analytics-web/utils/getRegionsTotals.ts b/apps/analytics-web/utils/getRegionsTotals.ts index a599a3fe..58a0ccdc 100644 --- a/apps/analytics-web/utils/getRegionsTotals.ts +++ b/apps/analytics-web/utils/getRegionsTotals.ts @@ -1,33 +1,33 @@ -import { getName } from 'i18n-iso-countries'; -import { type Event } from '~/app/_actions/actions'; +import { getName } from "i18n-iso-countries"; +import type { Event } from "~/app/_actions/actions"; export type RegionTotal = { - country: string; - total: number; + country: string; + total: number; }; export default function getRegionsTotals(events: Event[]): RegionTotal[] { - const calculatedTotals: Record = {}; + const calculatedTotals: Record = {}; - for (const event of events) { - const isocode = event.countryISOCode; + for (const event of events) { + const isocode = event.countryISOCode; - if (isocode) { - calculatedTotals[isocode] = (calculatedTotals[isocode] ?? 0) + 1; - } - } + if (isocode) { + calculatedTotals[isocode] = (calculatedTotals[isocode] ?? 0) + 1; + } + } - const regionsTotals: RegionTotal[] = []; + const regionsTotals: RegionTotal[] = []; - for (const isocode in calculatedTotals) { - regionsTotals.push({ - country: getName(isocode, 'en') ?? '', - total: calculatedTotals[isocode] ?? 0, - }); - } + for (const isocode in calculatedTotals) { + regionsTotals.push({ + country: getName(isocode, "en") ?? "", + total: calculatedTotals[isocode] ?? 0, + }); + } - // Sort in descending order - regionsTotals.sort((a, b) => b.total - a.total); + // Sort in descending order + regionsTotals.sort((a, b) => b.total - a.total); - return regionsTotals; + return regionsTotals; } diff --git a/apps/analytics-web/utils/getTotalAppsSetup.ts b/apps/analytics-web/utils/getTotalAppsSetup.ts index 86e125e5..4cf6e6ca 100644 --- a/apps/analytics-web/utils/getTotalAppsSetup.ts +++ b/apps/analytics-web/utils/getTotalAppsSetup.ts @@ -1,12 +1,12 @@ -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; export const getTotalAppsSetup = (events: Event[]) => { - const nAppsSetup = events.reduce((count, event) => { - if (event.type === 'AppSetup') { - return count + 1; - } - return count; - }, 0); + const nAppsSetup = events.reduce((count, event) => { + if (event.type === "AppSetup") { + return count + 1; + } + return count; + }, 0); - return nAppsSetup; + return nAppsSetup; }; diff --git a/apps/analytics-web/utils/getTotalDataExported.ts b/apps/analytics-web/utils/getTotalDataExported.ts index 9e2e658e..51e9754d 100644 --- a/apps/analytics-web/utils/getTotalDataExported.ts +++ b/apps/analytics-web/utils/getTotalDataExported.ts @@ -1,12 +1,12 @@ -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; export const getTotalDataExported = (events: Event[]) => { - const nDataExported = events.reduce((count, event) => { - if (event.type === 'DataExported') { - return count + 1; - } - return count; - }, 0); + const nDataExported = events.reduce((count, event) => { + if (event.type === "DataExported") { + return count + 1; + } + return count; + }, 0); - return nDataExported; + return nDataExported; }; diff --git a/apps/analytics-web/utils/getTotalErrors.ts b/apps/analytics-web/utils/getTotalErrors.ts index 2fb1b80b..80f1a611 100644 --- a/apps/analytics-web/utils/getTotalErrors.ts +++ b/apps/analytics-web/utils/getTotalErrors.ts @@ -1,12 +1,12 @@ -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; export const getTotalErrors = (events: Event[]) => { - const nErrors = events.reduce((count, event) => { - if (event.type === 'Error') { - return count + 1; - } - return count; - }, 0); + const nErrors = events.reduce((count, event) => { + if (event.type === "Error") { + return count + 1; + } + return count; + }, 0); - return nErrors; + return nErrors; }; diff --git a/apps/analytics-web/utils/getTotalInterviewsCompleted.ts b/apps/analytics-web/utils/getTotalInterviewsCompleted.ts index 8fb1e486..f46f132c 100644 --- a/apps/analytics-web/utils/getTotalInterviewsCompleted.ts +++ b/apps/analytics-web/utils/getTotalInterviewsCompleted.ts @@ -1,12 +1,12 @@ -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; export const getTotalInterviewsCompleted = (events: Event[]) => { - const nInterviewsCompleted = events.reduce((count, event) => { - if (event.type === 'InterviewCompleted') { - return count + 1; - } - return count; - }, 0); + const nInterviewsCompleted = events.reduce((count, event) => { + if (event.type === "InterviewCompleted") { + return count + 1; + } + return count; + }, 0); - return nInterviewsCompleted; + return nInterviewsCompleted; }; diff --git a/apps/analytics-web/utils/getTotalInterviewsStarted.ts b/apps/analytics-web/utils/getTotalInterviewsStarted.ts index e787d9b4..1583c0a8 100644 --- a/apps/analytics-web/utils/getTotalInterviewsStarted.ts +++ b/apps/analytics-web/utils/getTotalInterviewsStarted.ts @@ -1,12 +1,12 @@ -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; export const getTotalInterviewsStarted = (events: Event[]) => { - const nInterviewsStarted = events.reduce((count, event) => { - if (event.type === 'InterviewStarted') { - return count + 1; - } - return count; - }, 0); + const nInterviewsStarted = events.reduce((count, event) => { + if (event.type === "InterviewStarted") { + return count + 1; + } + return count; + }, 0); - return nInterviewsStarted; + return nInterviewsStarted; }; diff --git a/apps/analytics-web/utils/getTotalProtocolsInstalled.ts b/apps/analytics-web/utils/getTotalProtocolsInstalled.ts index 663494ae..3cb1a114 100644 --- a/apps/analytics-web/utils/getTotalProtocolsInstalled.ts +++ b/apps/analytics-web/utils/getTotalProtocolsInstalled.ts @@ -1,12 +1,12 @@ -import { type Event } from '~/app/_actions/actions'; +import type { Event } from "~/app/_actions/actions"; export const getTotalProtocolsInstalled = (events: Event[]) => { - const nProtocolsInstalled = events.reduce((count, event) => { - if (event.type === 'ProtocolInstalled') { - return count + 1; - } - return count; - }, 0); + const nProtocolsInstalled = events.reduce((count, event) => { + if (event.type === "ProtocolInstalled") { + return count + 1; + } + return count; + }, 0); - return nProtocolsInstalled; + return nProtocolsInstalled; }; diff --git a/apps/analytics-web/utils/shadcn.ts b/apps/analytics-web/utils/shadcn.ts index 9ad0df42..ac680b30 100644 --- a/apps/analytics-web/utils/shadcn.ts +++ b/apps/analytics-web/utils/shadcn.ts @@ -1,6 +1,6 @@ -import { type ClassValue, clsx } from 'clsx'; -import { twMerge } from 'tailwind-merge'; +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); + return twMerge(clsx(inputs)); } diff --git a/apps/analytics-web/vitest.config.ts b/apps/analytics-web/vitest.config.ts index 1d482eaf..73d944e2 100644 --- a/apps/analytics-web/vitest.config.ts +++ b/apps/analytics-web/vitest.config.ts @@ -1,9 +1,9 @@ -import { defineConfig } from 'vitest/config'; -import tsconfigPaths from 'vite-tsconfig-paths'; +import tsconfigPaths from "vite-tsconfig-paths"; +import { defineConfig } from "vitest/config"; export default defineConfig({ - test: { - environment: 'node', - }, - plugins: [tsconfigPaths()], + test: { + environment: "node", + }, + plugins: [tsconfigPaths()], }); diff --git a/apps/documentation/.gitignore b/apps/documentation/.gitignore deleted file mode 100644 index 07ae5a8a..00000000 --- a/apps/documentation/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.jsfind . -name .DS_Store -delete - -# testing -/coverage - -# next.js -/.next/ - -# production -/build -/out - -# misc -.DS_Store -._.DS_Store -**/.DS_Store -**/._.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts - -# dont commit the sidebar -/public/sidebar.json \ No newline at end of file diff --git a/apps/documentation/app/[locale]/[project]/[...docPath]/page.tsx b/apps/documentation/app/[locale]/[project]/[...docPath]/page.tsx index 65c4db1a..89ce4066 100644 --- a/apps/documentation/app/[locale]/[project]/[...docPath]/page.tsx +++ b/apps/documentation/app/[locale]/[project]/[...docPath]/page.tsx @@ -1,60 +1,60 @@ -import { notFound } from 'next/navigation'; -import { setRequestLocale } from 'next-intl/server'; -import type { Locale } from '~/app/types'; -import Article from '~/components/article'; -import { getDocsForRouteSegment, getDocumentForPath } from '~/lib/docs'; +import { setRequestLocale } from "next-intl/server"; +import { notFound } from "next/navigation"; +import type { Locale } from "~/app/types"; +import Article from "~/components/article"; +import { getDocsForRouteSegment, getDocumentForPath } from "~/lib/docs"; type PageParams = { - locale: Locale; - project: string; - docPath: string[]; + locale: Locale; + project: string; + docPath: string[]; }; export async function generateMetadata({ params }: { params: PageParams }) { - const { locale, project, docPath } = params; - const document = await getDocumentForPath({ - locale, - project, - pathSegment: docPath, - }); - - return { title: document?.frontmatter.title }; + const { locale, project, docPath } = params; + const document = await getDocumentForPath({ + locale, + project, + pathSegment: docPath, + }); + + return { title: document?.frontmatter.title }; } export function generateStaticParams({ - params, + params, }: { - params: Omit; + params: Omit; }) { - const { locale, project } = params; - const docPathSegmentsForRoute = getDocsForRouteSegment({ - locale, - project, - }); + const { locale, project } = params; + const docPathSegmentsForRoute = getDocsForRouteSegment({ + locale, + project, + }); - return docPathSegmentsForRoute; + return docPathSegmentsForRoute; } export default async function Page({ params }: { params: PageParams }) { - const { locale, project, docPath } = params; - // setting setRequestLocale to support next-intl for static rendering - setRequestLocale(locale); - - const document = await getDocumentForPath({ - locale, - project, - pathSegment: docPath, - }); - - if (document === null) notFound(); - - return ( -
0} - wip={document.frontmatter.wip} - /> - ); + const { locale, project, docPath } = params; + // setting setRequestLocale to support next-intl for static rendering + setRequestLocale(locale); + + const document = await getDocumentForPath({ + locale, + project, + pathSegment: docPath, + }); + + if (document === null) notFound(); + + return ( +
0} + wip={document.frontmatter.wip} + /> + ); } diff --git a/apps/documentation/app/[locale]/[project]/_components/InnerLanguageSwitcher.tsx b/apps/documentation/app/[locale]/[project]/_components/InnerLanguageSwitcher.tsx index 67d86b5c..e0a7eb2a 100644 --- a/apps/documentation/app/[locale]/[project]/_components/InnerLanguageSwitcher.tsx +++ b/apps/documentation/app/[locale]/[project]/_components/InnerLanguageSwitcher.tsx @@ -1,44 +1,35 @@ -import Link from 'next/link'; -import { getTranslations } from 'next-intl/server'; -import { getAvailableLocalesForPath } from '~/lib/docs'; +import { getTranslations } from "next-intl/server"; +import Link from "next/link"; +import { getAvailableLocalesForPath } from "~/lib/docs"; type InnerLanguageSwitcherProps = { - pathSegment: string[]; - currentLocale: string; - project: string; + pathSegment: string[]; + currentLocale: string; + project: string; }; -const InnerLanguageSwitcher = async ({ - pathSegment, - currentLocale, - project, -}: InnerLanguageSwitcherProps) => { - const t = await getTranslations('DocPage'); - const availableLocales = getAvailableLocalesForPath(project, pathSegment); - const filePath = `/${project}/` + pathSegment.join('/'); //document file path to navigate to +const InnerLanguageSwitcher = async ({ pathSegment, currentLocale, project }: InnerLanguageSwitcherProps) => { + const t = await getTranslations("DocPage"); + const availableLocales = getAvailableLocalesForPath(project, pathSegment); + const filePath = `/${project}/` + pathSegment.join("/"); //document file path to navigate to - // removes the current locale from availableLocales - const supportedLanguages = availableLocales.filter( - (locale) => locale !== currentLocale, - ); + // removes the current locale from availableLocales + const supportedLanguages = availableLocales.filter((locale) => locale !== currentLocale); - if (!supportedLanguages.length) return null; + if (!supportedLanguages.length) return null; - return ( -
- {t('docAvailableTxt')} - {supportedLanguages.map((lang) => ( -
- - {lang} - -
- ))} -
- ); + return ( +
+ {t("docAvailableTxt")} + {supportedLanguages.map((lang) => ( +
+ + {lang} + +
+ ))} +
+ ); }; export default InnerLanguageSwitcher; diff --git a/apps/documentation/app/[locale]/[project]/layout.tsx b/apps/documentation/app/[locale]/[project]/layout.tsx index 37c24a62..3890012d 100644 --- a/apps/documentation/app/[locale]/[project]/layout.tsx +++ b/apps/documentation/app/[locale]/[project]/layout.tsx @@ -1,25 +1,25 @@ -import { type ReactNode } from 'react'; -import { projects } from '~/app/types'; +import type { ReactNode } from "react"; +import { projects } from "~/app/types"; export function generateStaticParams({ - params, + params, }: { - params: { locale: string }; + params: { locale: string }; }) { - const { locale } = params; + const { locale } = params; - return projects.map((project) => { - return { - locale, - project, - }; - }); + return projects.map((project) => { + return { + locale, + project, + }; + }); } type Props = { - children: ReactNode; + children: ReactNode; }; export default function Layout({ children }: Props) { - return children; + return children; } diff --git a/apps/documentation/app/[locale]/[project]/page.tsx b/apps/documentation/app/[locale]/[project]/page.tsx index 1e2a41c3..ea4c6d18 100644 --- a/apps/documentation/app/[locale]/[project]/page.tsx +++ b/apps/documentation/app/[locale]/[project]/page.tsx @@ -1,31 +1,31 @@ -import { notFound } from 'next/navigation'; -import { setRequestLocale } from 'next-intl/server'; -import { getDocumentForPath } from '~/lib/docs'; -import Article from '~/components/article'; -import type { Locale } from '~/app/types'; +import { setRequestLocale } from "next-intl/server"; +import { notFound } from "next/navigation"; +import type { Locale } from "~/app/types"; +import Article from "~/components/article"; +import { getDocumentForPath } from "~/lib/docs"; type PageProps = { params: { locale: Locale; project: string } }; export default async function Page({ params }: PageProps) { - const { locale, project } = params; + const { locale, project } = params; - // setting setRequestLocale to support next-intl for static rendering - setRequestLocale(params.locale); + // setting setRequestLocale to support next-intl for static rendering + setRequestLocale(params.locale); - const document = await getDocumentForPath({ - locale, - project, - }); + const document = await getDocumentForPath({ + locale, + project, + }); - if (document === null) notFound(); + if (document === null) notFound(); - return ( -
0} - wip={document.frontmatter.wip} - /> - ); + return ( +
0} + wip={document.frontmatter.wip} + /> + ); } diff --git a/apps/documentation/app/[locale]/layout.tsx b/apps/documentation/app/[locale]/layout.tsx index 93dedaaa..8bbb1d2c 100644 --- a/apps/documentation/app/[locale]/layout.tsx +++ b/apps/documentation/app/[locale]/layout.tsx @@ -1,97 +1,80 @@ -import type { Metadata } from 'next'; -import { Quicksand } from 'next/font/google'; -import { notFound } from 'next/navigation'; -import { NextIntlClientProvider } from 'next-intl'; -import { getNow, getTimeZone, setRequestLocale } from 'next-intl/server'; -import type { Locale, Messages } from '~/app/types'; -import { locales } from '~/app/types'; -import AIAssistant from '~/components/ai-assistant'; -import { LayoutComponent } from '~/components/Layout'; -import { ThemeProvider } from '~/components/Providers/theme-provider'; -import { GoogleAnalytics } from '@next/third-parties/google'; -import { Analytics } from '@vercel/analytics/react'; -import { env } from '~/env'; +import { GoogleAnalytics } from "@next/third-parties/google"; +import { Analytics } from "@vercel/analytics/react"; +import type { Metadata } from "next"; +import { NextIntlClientProvider } from "next-intl"; +import { getNow, getTimeZone, setRequestLocale } from "next-intl/server"; +import { Quicksand } from "next/font/google"; +import { notFound } from "next/navigation"; +import type { Locale, Messages } from "~/app/types"; +import { locales } from "~/app/types"; +import { LayoutComponent } from "~/components/Layout"; +import { ThemeProvider } from "~/components/Providers/theme-provider"; +import AIAssistant from "~/components/ai-assistant"; +import { env } from "~/env"; const quicksand = Quicksand({ - weight: ['300', '400', '500', '600', '700'], - subsets: ['latin', 'latin-ext'], - display: 'swap', + weight: ["300", "400", "500", "600", "700"], + subsets: ["latin", "latin-ext"], + display: "swap", }); export function generateMetadata({ - params: { locale }, + params: { locale }, }: { - params: { locale: Locale }; + params: { locale: Locale }; }) { - const metadata: Metadata = { - other: { - 'docsearch:language': locale, - 'docsearch:version': '1.0.1', - }, - }; + const metadata: Metadata = { + other: { + "docsearch:language": locale, + "docsearch:version": "1.0.1", + }, + }; - return metadata; + return metadata; } export function generateStaticParams() { - return locales.map((locale) => ({ locale })); + return locales.map((locale) => ({ locale })); } type MainLayoutProps = { - children: React.ReactNode; - params: { locale: Locale }; + children: React.ReactNode; + params: { locale: Locale }; }; -export default async function MainLayout({ - children, - params: { locale }, -}: MainLayoutProps) { - // Validate that the incoming `locale` parameter is valid - const isValidLocale = locales.some((cur) => cur === locale); - if (!isValidLocale) notFound(); +export default async function MainLayout({ children, params: { locale } }: MainLayoutProps) { + // Validate that the incoming `locale` parameter is valid + const isValidLocale = locales.some((cur) => cur === locale); + if (!isValidLocale) notFound(); - // setting setRequestLocale to support next-intl for static rendering - setRequestLocale(locale); + // setting setRequestLocale to support next-intl for static rendering + setRequestLocale(locale); - const now = await getNow({ locale }); - const timeZone = await getTimeZone({ locale }); + const now = await getNow({ locale }); + const timeZone = await getTimeZone({ locale }); - let messages; + let messages: { default: Messages }; - try { - messages = (await import(`../../messages/${locale}.json`)) as { - default: Messages; - }; - } catch (e) { - notFound(); - } + try { + messages = (await import(`../../messages/${locale}.json`)) as { + default: Messages; + }; + } catch (e) { + notFound(); + } - return ( - - - - - {children} - - - - - - - - ); + return ( + + + + + {children} + + + + + + + + ); } diff --git a/apps/documentation/app/[locale]/page.tsx b/apps/documentation/app/[locale]/page.tsx index d716e124..b8be431a 100644 --- a/apps/documentation/app/[locale]/page.tsx +++ b/apps/documentation/app/[locale]/page.tsx @@ -1,11 +1,11 @@ -import { setRequestLocale } from 'next-intl/server'; -import type { Locale } from '~/app/types'; -import { Hero } from '~/components/Hero'; +import { setRequestLocale } from "next-intl/server"; +import type { Locale } from "~/app/types"; +import { Hero } from "~/components/Hero"; const Page = ({ params: { locale } }: { params: { locale: Locale } }) => { - // setting setRequestLocale to support next-intl for static rendering - setRequestLocale(locale); + // setting setRequestLocale to support next-intl for static rendering + setRequestLocale(locale); - return ; + return ; }; export default Page; diff --git a/apps/documentation/app/layout.tsx b/apps/documentation/app/layout.tsx index b79c9863..497c9eed 100644 --- a/apps/documentation/app/layout.tsx +++ b/apps/documentation/app/layout.tsx @@ -1,14 +1,14 @@ -import { type ReactNode } from 'react'; -import '@codaco/tailwind-config/globals.css'; -import '~/styles/globals.css'; -import '~/lib/highlight.js/styles/tokyo-night-dark.css'; +import type { ReactNode } from "react"; +import "@codaco/tailwind-config/globals.css"; +import "~/styles/globals.css"; +import "~/styles/tokyo-night-dark.css"; type Props = { - children: ReactNode; + children: ReactNode; }; // Since we have a `not-found.tsx` page on the root, a layout file // is required, even if it's just passing children through. export default function RootLayout({ children }: Props) { - return children; + return children; } diff --git a/apps/documentation/app/manifest.ts b/apps/documentation/app/manifest.ts index 6fce13a1..77a6d7f7 100644 --- a/apps/documentation/app/manifest.ts +++ b/apps/documentation/app/manifest.ts @@ -1,26 +1,26 @@ -import { type MetadataRoute } from 'next'; +import type { MetadataRoute } from "next"; export default function manifest(): MetadataRoute.Manifest { - return { - name: 'Network Canvas Documentation', - short_name: 'Documentation', - description: - 'Documentation and information about the Network Canvas project. Network Canvas is free suite of tools that facilitate research that uses complex personal network data.', - start_url: '/', - display: 'standalone', - background_color: '#1E283A', - theme_color: '#1E283A', - icons: [ - { - src: '/favicons/icon192.png', - sizes: '192x192', - type: 'image/png', - }, - { - src: '/favicons/icon512.png', - sizes: '512x512', - type: 'image/png', - }, - ], - }; + return { + name: "Network Canvas Documentation", + short_name: "Documentation", + description: + "Documentation and information about the Network Canvas project. Network Canvas is free suite of tools that facilitate research that uses complex personal network data.", + start_url: "/", + display: "standalone", + background_color: "#1E283A", + theme_color: "#1E283A", + icons: [ + { + src: "/favicons/icon192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "/favicons/icon512.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; } diff --git a/apps/documentation/app/not-found.tsx b/apps/documentation/app/not-found.tsx index 793ac62b..67fbc611 100644 --- a/apps/documentation/app/not-found.tsx +++ b/apps/documentation/app/not-found.tsx @@ -1,67 +1,47 @@ -import { - Divider, - Heading, - ListItem, - Paragraph, - UnorderedList, -} from '@codaco/ui'; -import { Quicksand } from 'next/font/google'; +import { Divider, Heading, ListItem, Paragraph, UnorderedList } from "@codaco/ui"; +import { Quicksand } from "next/font/google"; -import Link from '~/components/Link'; -import { ThemeProvider } from '~/components/Providers/theme-provider'; +import Link from "~/components/Link"; +import { ThemeProvider } from "~/components/Providers/theme-provider"; const quicksand = Quicksand({ - weight: ['300', '400', '500', '600', '700'], - subsets: ['latin', 'latin-ext'], - display: 'swap', + weight: ["300", "400", "500", "600", "700"], + subsets: ["latin", "latin-ext"], + display: "swap", }); export default function NotFound() { - return ( - - - -
- 404 - Not found - - - The requested page could not be found. - - - This is most likely to have happened because the page has been - moved or deleted. We apologize for any inconvenience this has - caused. - - Please try the following: - - - If you typed the page address in the address bar, make sure that - it is spelled correctly. - - - Use the 'return home' link below to navigate to the - home page, and then navigate to the page you are looking for - using the menus. - - - Contact the project team if you believe you are seeing this page - in error, including details of the page you were trying to - reach. Please email us at{' '} - - info@networkcanvas.com - - . - - - Return Home -
- -
- - ); + return ( + + + +
+ 404 - Not found + + The requested page could not be found. + + This is most likely to have happened because the page has been moved or deleted. We apologize for any + inconvenience this has caused. + + Please try the following: + + + If you typed the page address in the address bar, make sure that it is spelled correctly. + + + Use the 'return home' link below to navigate to the home page, and then navigate to the page + you are looking for using the menus. + + + Contact the project team if you believe you are seeing this page in error, including details of the page + you were trying to reach. Please email us at{" "} + info@networkcanvas.com. + + + Return Home +
+ +
+ + ); } diff --git a/apps/documentation/app/page.tsx b/apps/documentation/app/page.tsx index 2977201d..5bf7e5cd 100644 --- a/apps/documentation/app/page.tsx +++ b/apps/documentation/app/page.tsx @@ -1,8 +1,8 @@ -import { redirect } from 'next/navigation'; +import { redirect } from "next/navigation"; export default function RootPage() { - // Redirect to en for now. This is a limitation of static site generation - // that we need to work around by creating a client component to read the - // navigator.language and redirect to the appropriate locale. - redirect('/en'); + // Redirect to en for now. This is a limitation of static site generation + // that we need to work around by creating a client component to read the + // navigator.language and redirect to the appropriate locale. + redirect("/en"); } diff --git a/apps/documentation/app/types.ts b/apps/documentation/app/types.ts index c5a016d7..0c5bcbd0 100644 --- a/apps/documentation/app/types.ts +++ b/apps/documentation/app/types.ts @@ -1,33 +1,33 @@ -import { z } from 'zod'; +import { z } from "zod"; -export const projects = ['desktop', 'fresco'] as const; +export const projects = ["desktop", "fresco"] as const; export type ProjectsEnum = (typeof projects)[number]; -export const locales = ['en'] as const; +export const locales = ["en"] as const; const Locale = z.enum(locales); export type Locale = (typeof locales)[number]; export const itemTypes = [ - 'project', // Top level projects - 'folder', // Anything that has children - 'page', // Single page + "project", // Top level projects + "folder", // Anything that has children + "page", // Single page ] as const; const ItemTypesEnum = z.enum(itemTypes); export const SidebarItemBase = z.object({ - type: ItemTypesEnum, - sourceFile: z.string().optional(), - label: z.string(), + type: ItemTypesEnum, + sourceFile: z.string().optional(), + label: z.string(), }); export const SidebarPageSchema = SidebarItemBase.extend({ - type: z.literal('page'), - sourceFile: z.string(), - navOrder: z.number().nullable(), + type: z.literal("page"), + sourceFile: z.string(), + navOrder: z.number().nullable(), }); export type SidebarPage = z.infer; @@ -38,55 +38,47 @@ export type SidebarPage = z.infer; // Because of that, we have to do some other shenanigans. export const baseSidebarFolder = SidebarItemBase.extend({ - type: z.literal('folder'), - navOrder: z.number().nullable(), - expanded: z.boolean().optional(), + type: z.literal("folder"), + navOrder: z.number().nullable(), + expanded: z.boolean().optional(), }); export type TSidebarFolder = z.infer & { - children: Record; + children: Record; }; -export const SidebarFolderSchema: z.ZodType = - baseSidebarFolder.extend({ - children: z.lazy(() => - z.record(z.union([SidebarFolderSchema, SidebarPageSchema])), - ), - }); +export const SidebarFolderSchema: z.ZodType = baseSidebarFolder.extend({ + children: z.lazy(() => z.record(z.union([SidebarFolderSchema, SidebarPageSchema]))), +}); export type SidebarFolder = z.infer; export const SidebarProjectSchema = SidebarItemBase.extend({ - type: z.literal('project'), - children: z.record(z.union([SidebarFolderSchema, SidebarPageSchema])), + type: z.literal("project"), + children: z.record(z.union([SidebarFolderSchema, SidebarPageSchema])), }); export type SidebarProject = z.infer; -export const SidebarLocaleDefinitionSchema = z.record( - z.string(), - SidebarProjectSchema, -); +export const SidebarLocaleDefinitionSchema = z.record(z.string(), SidebarProjectSchema); -export type SidebarLocaleDefinition = z.infer< - typeof SidebarLocaleDefinitionSchema ->; +export type SidebarLocaleDefinition = z.infer; export const SideBarSchema = z.record(Locale, SidebarLocaleDefinitionSchema); export type TSideBar = z.infer; -const metadatatypes = ['folder', 'project'] as const; +const metadatatypes = ["folder", "project"] as const; export const MetadataFileSchema = z.object({ - type: z.enum(metadatatypes), - sourceFile: z.string().optional(), - localeLabels: z.record(z.string(), z.string()).optional(), - localeIndexFiles: z.record(z.string(), z.string()).optional(), - isExpanded: z.boolean().optional(), - navOrder: z.number().optional(), + type: z.enum(metadatatypes), + sourceFile: z.string().optional(), + localeLabels: z.record(z.string(), z.string()).optional(), + localeIndexFiles: z.record(z.string(), z.string()).optional(), + isExpanded: z.boolean().optional(), + navOrder: z.number().optional(), }); export type MetadataFile = z.infer; -export type Messages = typeof import('../messages/en.json'); +export type Messages = typeof import("../messages/en.json"); diff --git a/apps/documentation/components.json b/apps/documentation/components.json index 3dc921a0..5aeba109 100644 --- a/apps/documentation/components.json +++ b/apps/documentation/components.json @@ -1,16 +1,16 @@ { - "$schema": "https://ui.shadcn.com/schema.json", - "style": "default", - "rsc": true, - "tsx": true, - "tailwind": { - "config": "tailwind.config.ts", - "css": "app/globals.css", - "baseColor": "slate", - "cssVariables": true - }, - "aliases": { - "components": "~/components", - "utils": "~/lib/utils" - } + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "app/globals.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "~/components", + "utils": "~/lib/utils" + } } diff --git a/apps/documentation/components/DocSearchComponent.tsx b/apps/documentation/components/DocSearchComponent.tsx index 94ae36f9..87de1f36 100644 --- a/apps/documentation/components/DocSearchComponent.tsx +++ b/apps/documentation/components/DocSearchComponent.tsx @@ -1,149 +1,119 @@ -'use client'; +"use client"; -import { DocSearch } from '@docsearch/react'; -import { useLocale, useTranslations } from 'next-intl'; -import '@docsearch/css'; -import { env } from '~/env'; -import { inputVariants } from '@codaco/ui'; -import { Search } from 'lucide-react'; -import { cn } from '~/lib/utils'; +import { DocSearch } from "@docsearch/react"; +import { useLocale, useTranslations } from "next-intl"; +import "@docsearch/css"; +import { inputVariants } from "@codaco/ui"; +import { Search } from "lucide-react"; +import { env } from "~/env"; +import { cn } from "~/lib/utils"; const DocSearchComponent = ({ - className, - large, + className, + large, }: { - className?: string; - large?: boolean; + className?: string; + large?: boolean; }) => { - const locale = useLocale(); - const t = useTranslations('DocSearch'); + const locale = useLocale(); + const t = useTranslations("DocSearch"); - // This is honestly some of the biggest bullshit I've ever had to deal with. - // Algolia - fix your shit. - const madHax = () => { - const element = document.getElementsByClassName( - 'DocSearch-Button', - )[0] as HTMLButtonElement; + // This is honestly some of the biggest bullshit I've ever had to deal with. + // Algolia - fix your shit. + const madHax = () => { + const element = document.getElementsByClassName("DocSearch-Button")[0] as HTMLButtonElement; - if (element) { - element.click(); - } - }; + if (element) { + element.click(); + } + }; - return ( - <> - -
- -
- - ); + + +
+ +
+ + ); }; export default DocSearchComponent; diff --git a/apps/documentation/components/FancyHeading.tsx b/apps/documentation/components/FancyHeading.tsx index b75b31f5..3fbe82d4 100644 --- a/apps/documentation/components/FancyHeading.tsx +++ b/apps/documentation/components/FancyHeading.tsx @@ -1,67 +1,67 @@ -'use client'; +"use client"; -import { motion } from 'framer-motion'; -import { Heading, type HeadingProps } from '@codaco/ui'; -import { Children } from 'react'; +import { Heading, type HeadingProps } from "@codaco/ui"; +import { motion } from "framer-motion"; +import { Children } from "react"; // FancyHeading is a component that animates the words in a heading. const FancyHeading = (props: HeadingProps) => { - const words = Children.toArray(props.children); + const words = Children.toArray(props.children); - const variants = { - hidden: { y: '100%' }, - visible: (custom: number) => ({ - y: 0, - transition: { - type: 'spring', - stiffness: 200, - damping: 30, - mass: 1, - delay: 0.1 * custom, - }, - }), - }; + const variants = { + hidden: { y: "100%" }, + visible: (custom: number) => ({ + y: 0, + transition: { + type: "spring", + stiffness: 200, + damping: 30, + mass: 1, + delay: 0.1 * custom, + }, + }), + }; - const renderWord = (word: string, outerIndex: number) => { - const segments = word.split(' '); - return segments.map((segment, innerIndex) => ( - - - {segment}  - - - )); - }; + const renderWord = (word: string, outerIndex: number) => { + const segments = word.split(" "); + return segments.map((segment, innerIndex) => ( + + + {segment}  + + + )); + }; - return ( - - {words.map((word, index) => - typeof word === 'string' ? ( - renderWord(word, index) - ) : ( - - {word} - - ), - )} - - ); + return ( + + {words.map((word, index) => + typeof word === "string" ? ( + renderWord(word, index) + ) : ( + + {word} + + ), + )} + + ); }; export default FancyHeading; diff --git a/apps/documentation/components/FancyParagraph.tsx b/apps/documentation/components/FancyParagraph.tsx index c6416349..dd743820 100644 --- a/apps/documentation/components/FancyParagraph.tsx +++ b/apps/documentation/components/FancyParagraph.tsx @@ -1,67 +1,67 @@ -import { motion } from 'framer-motion'; -import { Paragraph, type ParagraphProps } from '@codaco/ui'; -import { Children } from 'react'; +import { Paragraph, type ParagraphProps } from "@codaco/ui"; +import { motion } from "framer-motion"; +import { Children } from "react"; // FancyParagraph animates individual words in a paragraph. const FancyParagraph = (props: ParagraphProps) => { - const { children, ...rest } = props; + const { children, ...rest } = props; - const words = Children.toArray(children); + const words = Children.toArray(children); - const variants = { - hidden: { y: '100%' }, - visible: (custom: number) => ({ - y: 0, - transition: { - type: 'spring', - stiffness: 200, - damping: 30, - mass: 1, - delay: 0.1 * custom, - }, - }), - }; + const variants = { + hidden: { y: "100%" }, + visible: (custom: number) => ({ + y: 0, + transition: { + type: "spring", + stiffness: 200, + damping: 30, + mass: 1, + delay: 0.1 * custom, + }, + }), + }; - const renderWord = (word: string, outerIndex: number) => { - const segments = word.split(' '); - return segments.map((segment, innerIndex) => ( - - - {segment}  - - - )); - }; + const renderWord = (word: string, outerIndex: number) => { + const segments = word.split(" "); + return segments.map((segment, innerIndex) => ( + + + {segment}  + + + )); + }; - return ( - - {words.map((word, index) => - typeof word === 'string' ? ( - renderWord(word, index) - ) : ( - - {word} - - ), - )} - - ); + return ( + + {words.map((word, index) => + typeof word === "string" ? ( + renderWord(word, index) + ) : ( + + {word} + + ), + )} + + ); }; export default FancyParagraph; diff --git a/apps/documentation/components/Hero.tsx b/apps/documentation/components/Hero.tsx index 99d416ba..27a4b6a7 100644 --- a/apps/documentation/components/Hero.tsx +++ b/apps/documentation/components/Hero.tsx @@ -1,103 +1,96 @@ -'use client'; +"use client"; -import { useTranslations } from 'next-intl'; -import DocSearchComponent from './DocSearchComponent'; -import FancyHeading from './FancyHeading'; -import FancyParagraph from './FancyParagraph'; -import { motion } from 'framer-motion'; -import { Paragraph } from '@codaco/ui'; -import { cn } from '~/lib/utils'; -import { useTheme } from 'next-themes'; -import Link from 'next/link'; +import { Paragraph } from "@codaco/ui"; +import { motion } from "framer-motion"; +import { useTranslations } from "next-intl"; +import { useTheme } from "next-themes"; +import Link from "next/link"; +import { cn } from "~/lib/utils"; +import DocSearchComponent from "./DocSearchComponent"; +import FancyHeading from "./FancyHeading"; +import FancyParagraph from "./FancyParagraph"; function ProjectCard({ - href, - title, - description, - icon, + href, + title, + description, + icon, }: { - href: string; - title: string; - description: string; - icon: string; + href: string; + title: string; + description: string; + icon: string; }) { - return ( - -
-
- {title} - - {title} - -
- {description} -
- - ); + return ( + +
+
+ {title} + + {title} + +
+ {description} +
+ + ); } export function Hero() { - const t = useTranslations(); - const { resolvedTheme } = useTheme(); + const t = useTranslations(); + const { resolvedTheme } = useTheme(); - return ( - <> - -
-
- - {t('Hero.title')} - - {t('Hero.tagline')} - -
- {resolvedTheme !== 'dark' && ( -
- - Robot - -
- )} -
-
- - -
-
- - ); + return ( + <> + +
+
+ + {t("Hero.title")} + + {t("Hero.tagline")} + +
+ {resolvedTheme !== "dark" && ( +
+ + Robot + +
+ )} +
+
+ + +
+
+ + ); } diff --git a/apps/documentation/components/Layout.tsx b/apps/documentation/components/Layout.tsx index 6e8a58b4..aacf09e6 100644 --- a/apps/documentation/components/Layout.tsx +++ b/apps/documentation/components/Layout.tsx @@ -1,53 +1,53 @@ -'use client'; +"use client"; -import { useLocale } from 'next-intl'; -import { usePathname } from 'next/navigation'; -import { Sidebar } from '~/components/Sidebar'; -import { cn } from '~/lib/utils'; -import SharedNav from './SharedNav/SharedNav'; -import { motion } from 'framer-motion'; -import { BackgroundBlobs } from '@codaco/art'; +import { BackgroundBlobs } from "@codaco/art"; +import { motion } from "framer-motion"; +import { useLocale } from "next-intl"; +import { usePathname } from "next/navigation"; +import { Sidebar } from "~/components/Sidebar"; +import { cn } from "~/lib/utils"; +import SharedNav from "./SharedNav/SharedNav"; export function LayoutComponent({ children }: { children: React.ReactNode }) { - const pathname = usePathname(); - const locale = useLocale(); + const pathname = usePathname(); + const locale = useLocale(); - // Check if we are on the home page by comparing the pathname to our supported locals - const isHomePage = pathname === `/${locale}`; + // Check if we are on the home page by comparing the pathname to our supported locals + const isHomePage = pathname === `/${locale}`; - return ( - <> - - - - -
- {!isHomePage && ( - - )} + return ( + <> + + + + +
+ {!isHomePage && ( + + )} - {children} -
-
-
- © {new Date().getFullYear()} Complex Data Collective -
-
- - ); + {children} +
+
+
+ © {new Date().getFullYear()} Complex Data Collective +
+
+ + ); } diff --git a/apps/documentation/components/Link.tsx b/apps/documentation/components/Link.tsx index 33892337..7c0442a0 100644 --- a/apps/documentation/components/Link.tsx +++ b/apps/documentation/components/Link.tsx @@ -1,27 +1,24 @@ -import NextLink, { type LinkProps } from 'next/link'; -import { type ReactNode, forwardRef } from 'react'; -import { cn } from '~/lib/utils'; +import NextLink, { type LinkProps } from "next/link"; +import { type ReactNode, forwardRef } from "react"; +import { cn } from "~/lib/utils"; -const Link = forwardRef< - HTMLAnchorElement, - LinkProps & { children: ReactNode; className?: string } ->((props, ref) => { - return ( - - - {props.children} - - - ); +const Link = forwardRef((props, ref) => { + return ( + + + {props.children} + + + ); }); -Link.displayName = 'Link'; +Link.displayName = "Link"; export default Link; diff --git a/apps/documentation/components/MobileNavBar.tsx b/apps/documentation/components/MobileNavBar.tsx index 9122a809..1ffe557d 100644 --- a/apps/documentation/components/MobileNavBar.tsx +++ b/apps/documentation/components/MobileNavBar.tsx @@ -1,49 +1,41 @@ -import { Button } from '@codaco/ui'; -import { X as CloseMenu, Menu as HamburgerMenu } from 'lucide-react'; -import DocSearchComponent from './DocSearchComponent'; -import MobileSidebarDialog from './MobileSidebarDialog'; -import { useState } from 'react'; -import { usePathname } from 'next/navigation'; -import { useLocale } from 'next-intl'; -import { cn } from '~/lib/utils'; +import { Button } from "@codaco/ui"; +import { X as CloseMenu, Menu as HamburgerMenu } from "lucide-react"; +import { useLocale } from "next-intl"; +import { usePathname } from "next/navigation"; +import { useState } from "react"; +import { cn } from "~/lib/utils"; +import DocSearchComponent from "./DocSearchComponent"; +import MobileSidebarDialog from "./MobileSidebarDialog"; const MobileNavBar = () => { - const [open, setOpen] = useState(false); - const pathname = usePathname(); - const locale = useLocale(); + const [open, setOpen] = useState(false); + const pathname = usePathname(); + const locale = useLocale(); - // Check if we are on the home page by comparing the pathname to our supported locals - const isHomePage = pathname === `/${locale}`; - return ( - <> -
- - - {open ? ( - - ) : ( - - )} -
- - ); + // Check if we are on the home page by comparing the pathname to our supported locals + const isHomePage = pathname === `/${locale}`; + return ( + <> +
+ + + {open ? ( + + ) : ( + + )} +
+ + ); }; export default MobileNavBar; diff --git a/apps/documentation/components/MobileSidebarDialog.tsx b/apps/documentation/components/MobileSidebarDialog.tsx index 56d7b0d4..10a03288 100644 --- a/apps/documentation/components/MobileSidebarDialog.tsx +++ b/apps/documentation/components/MobileSidebarDialog.tsx @@ -1,54 +1,48 @@ -import { useLocale } from 'next-intl'; -import { usePathname } from 'next/navigation'; -import { NavigationMenuMobile } from '~/components/SharedNav/Menu'; -import { Sheet, SheetContent } from '~/components/ui/sheet'; -import LogoComponent from './SharedNav/LogoComponent'; -import { Sidebar } from './Sidebar'; -import { Button } from '@codaco/ui'; -import { X as CloseMenu } from 'lucide-react'; -import { useEffect } from 'react'; +import { Button } from "@codaco/ui"; +import { X as CloseMenu } from "lucide-react"; +import { useLocale } from "next-intl"; +import { usePathname } from "next/navigation"; +import { useEffect } from "react"; +import { NavigationMenuMobile } from "~/components/SharedNav/Menu"; +import { Sheet, SheetContent } from "~/components/ui/sheet"; +import LogoComponent from "./SharedNav/LogoComponent"; +import { Sidebar } from "./Sidebar"; type MobileSidebarDialogProps = { - open: boolean; - setOpen: React.Dispatch>; + open: boolean; + setOpen: React.Dispatch>; }; -export default function MobileSidebarDialog({ - open, - setOpen, -}: MobileSidebarDialogProps) { - const pathname = usePathname(); - const locale = useLocale(); +export default function MobileSidebarDialog({ open, setOpen }: MobileSidebarDialogProps) { + const pathname = usePathname(); + const locale = useLocale(); - // Check if we are on the home page by comparing the pathname to our supported locals - const isHomePage = pathname === `/${locale}`; + // Check if we are on the home page by comparing the pathname to our supported locals + const isHomePage = pathname === `/${locale}`; - // When the path changes, close - useEffect(() => { - setOpen(false); - }, [pathname, setOpen]); + // biome-ignore lint/correctness/useExhaustiveDependencies: close when the path changes + useEffect(() => { + setOpen(false); + }, [pathname, setOpen]); - return ( - - -
- - -
+ return ( + + +
+ + +
- - {!isHomePage && } -
-
- ); + + {!isHomePage && } +
+
+ ); } diff --git a/apps/documentation/components/PopoutBox.tsx b/apps/documentation/components/PopoutBox.tsx index f353cd24..b5dc2139 100644 --- a/apps/documentation/components/PopoutBox.tsx +++ b/apps/documentation/components/PopoutBox.tsx @@ -1,52 +1,46 @@ -import { Heading } from '@codaco/ui'; -import { type ReactNode } from 'react'; -import { cn } from '~/lib/utils'; +import { Heading } from "@codaco/ui"; +import type { ReactNode } from "react"; +import { cn } from "~/lib/utils"; export type PopoutBoxProps = { - title?: string; - children: ReactNode; - icon?: ReactNode; - iconClassName?: string; - className?: string; + title?: string; + children: ReactNode; + icon?: ReactNode; + iconClassName?: string; + className?: string; }; -const PopoutBox = ({ - title, - children, - icon, - className, - iconClassName, -}: PopoutBoxProps) => { - return ( - + ); }; export default PopoutBox; diff --git a/apps/documentation/components/ProjectSwitcher.tsx b/apps/documentation/components/ProjectSwitcher.tsx index 8c265f49..bf82ac93 100644 --- a/apps/documentation/components/ProjectSwitcher.tsx +++ b/apps/documentation/components/ProjectSwitcher.tsx @@ -1,97 +1,78 @@ -'use client'; +"use client"; -import { - Heading, - Paragraph, - Select, - SelectContent, - SelectGroup, - SelectItem, - SelectTrigger, -} from '@codaco/ui'; -import { useRouter } from '~/navigation'; -import { useLocale, useTranslations } from 'next-intl'; -import { usePathname } from 'next/navigation'; -import { type Locale, type ProjectsEnum, projects } from '~/app/types'; -import { forwardRef } from 'react'; -import { cn } from '~/lib/utils'; +import { Heading, Paragraph, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger } from "@codaco/ui"; +import { useLocale, useTranslations } from "next-intl"; +import { usePathname } from "next/navigation"; +import { forwardRef } from "react"; +import { type Locale, type ProjectsEnum, projects } from "~/app/types"; +import { cn } from "~/lib/utils"; +import { useRouter } from "~/navigation"; const getImageForProject = (project: ProjectsEnum) => { - if (project === 'desktop') { - return ( - {project} - ); - } + if (project === "desktop") { + return {project}; + } - if (project === 'fresco') { - return ( - {project} - ); - } + if (project === "fresco") { + return {project}; + } }; const ProjectValue = forwardRef< - HTMLDivElement, - { - project: ProjectsEnum; - showDescription?: boolean; - } + HTMLDivElement, + { + project: ProjectsEnum; + showDescription?: boolean; + } >(({ project, showDescription }, ref) => { - const t = useTranslations('ProjectSwitcher'); - return ( -
-
- {getImageForProject(project)} -
-
- - {t(`${project}.label`)} - - {showDescription && ( - - {t(`${project}.description`)} - - )} -
-
- ); + const t = useTranslations("ProjectSwitcher"); + return ( +
+
+ {getImageForProject(project)} +
+
+ + {t(`${project}.label`)} + + {showDescription && ( + + {t(`${project}.description`)} + + )} +
+
+ ); }); -ProjectValue.displayName = 'ProjectValue'; +ProjectValue.displayName = "ProjectValue"; export default function ProjectSwitcher() { - const router = useRouter(); - const pathname = usePathname(); - const project = pathname.split('/')[2]! as ProjectsEnum; - const locale = useLocale() as Locale; + const router = useRouter(); + const pathname = usePathname(); + // biome-ignore lint/style/noNonNullAssertion: path structure is known + const project = pathname.split("/")[2]! as ProjectsEnum; + const locale = useLocale() as Locale; - return ( - - ); + return ( + + ); } diff --git a/apps/documentation/components/Providers/theme-provider.tsx b/apps/documentation/components/Providers/theme-provider.tsx index 4a47fb7e..d051f14f 100644 --- a/apps/documentation/components/Providers/theme-provider.tsx +++ b/apps/documentation/components/Providers/theme-provider.tsx @@ -1,11 +1,8 @@ -'use client'; +"use client"; -import * as React from 'react'; -import { - ThemeProvider as NextThemesProvider, - type ThemeProviderProps, -} from 'next-themes'; +import { ThemeProvider as NextThemesProvider, type ThemeProviderProps } from "next-themes"; +import * as React from "react"; export function ThemeProvider({ children, ...props }: ThemeProviderProps) { - return {children}; + return {children}; } diff --git a/apps/documentation/components/SharedNav/LogoComponent.tsx b/apps/documentation/components/SharedNav/LogoComponent.tsx index 4ebb346c..0659fed8 100644 --- a/apps/documentation/components/SharedNav/LogoComponent.tsx +++ b/apps/documentation/components/SharedNav/LogoComponent.tsx @@ -1,42 +1,31 @@ -import { useTheme } from 'next-themes'; -import Link from 'next/link'; -import { cn } from '~/lib/utils'; +import { useTheme } from "next-themes"; +import Link from "next/link"; +import { cn } from "~/lib/utils"; type LogoComponentProps = { - invisible?: boolean; - className?: string; + invisible?: boolean; + className?: string; }; -const LogoComponent = ({ - invisible = false, - className, -}: LogoComponentProps) => { - const { resolvedTheme } = useTheme(); - return ( - - Network Canvas Documentation - Network Canvas Documentation - - ); +const LogoComponent = ({ invisible = false, className }: LogoComponentProps) => { + const { resolvedTheme } = useTheme(); + return ( + + Network Canvas Documentation + Network Canvas Documentation + + ); }; export default LogoComponent; diff --git a/apps/documentation/components/SharedNav/Menu.tsx b/apps/documentation/components/SharedNav/Menu.tsx index 11508758..b17b6c3e 100644 --- a/apps/documentation/components/SharedNav/Menu.tsx +++ b/apps/documentation/components/SharedNav/Menu.tsx @@ -1,220 +1,202 @@ -import { - Heading, - Paragraph, - buttonVariants, - headingVariants, -} from '@codaco/ui'; -import * as NavigationMenu from '@radix-ui/react-navigation-menu'; -import { ArrowLeftCircle, ChevronDown } from 'lucide-react'; -import { useTranslations } from 'next-intl'; -import Link from 'next/link'; -import { useState } from 'react'; -import { cn } from '~/lib/utils'; +import { Heading, Paragraph, buttonVariants, headingVariants } from "@codaco/ui"; +import * as NavigationMenu from "@radix-ui/react-navigation-menu"; +import { ArrowLeftCircle, ChevronDown } from "lucide-react"; +import { useTranslations } from "next-intl"; +import Link from "next/link"; +import { useState } from "react"; +import { cn } from "~/lib/utils"; const links = [ - { - translationKey: 'community', - href: 'https://community.networkcanvas.com', - }, - { - translationKey: 'documentation', - href: '/', - }, - { - translationKey: 'projects', - menu: [ - { - titleTranslationKey: 'projectsChildren.partner-services.label', - descriptionTranslationKey: - 'projectsChildren.partner-services.description', - href: 'https://partnerservices.networkcanvas.com', - image: '/images/projects/partner-services.jpg', - }, - { - titleTranslationKey: 'projectsChildren.fresco.label', - descriptionTranslationKey: 'projectsChildren.fresco.description', - href: 'https://github.com/complexdatacollective/Fresco', - image: '/images/fresco.svg', - }, - { - titleTranslationKey: 'projectsChildren.studio.label', - descriptionTranslationKey: 'projectsChildren.studio.description', - href: 'https://github.com/complexdatacollective/Studio', - image: '/images/studio.svg', - }, - ], - }, - { - translationKey: 'download', - style: 'button', - href: 'https://networkcanvas.com/download', - }, + { + translationKey: "community", + href: "https://community.networkcanvas.com", + }, + { + translationKey: "documentation", + href: "/", + }, + { + translationKey: "projects", + menu: [ + { + titleTranslationKey: "projectsChildren.partner-services.label", + descriptionTranslationKey: "projectsChildren.partner-services.description", + href: "https://partnerservices.networkcanvas.com", + image: "/images/projects/partner-services.jpg", + }, + { + titleTranslationKey: "projectsChildren.fresco.label", + descriptionTranslationKey: "projectsChildren.fresco.description", + href: "https://github.com/complexdatacollective/Fresco", + image: "/images/fresco.svg", + }, + { + titleTranslationKey: "projectsChildren.studio.label", + descriptionTranslationKey: "projectsChildren.studio.description", + href: "https://github.com/complexdatacollective/Studio", + image: "/images/studio.svg", + }, + ], + }, + { + translationKey: "download", + style: "button", + href: "https://networkcanvas.com/download", + }, ]; const linkClasses = cn( - headingVariants({ variant: 'h4-all-caps', margin: 'none' }), - 'focusable flex items-center underline-offset-8 hover:text-success', + headingVariants({ variant: "h4-all-caps", margin: "none" }), + "focusable flex items-center underline-offset-8 hover:text-success", ); export const NavigationMenuDemo = () => { - const t = useTranslations('SharedNavigation'); + const t = useTranslations("SharedNavigation"); - return ( - -