Refine admin config layout

This commit is contained in:
Sam Becker 2024-06-19 13:19:24 -05:00
parent 5d2a1e7102
commit 616726b5fd
9 changed files with 592 additions and 540 deletions

View File

@ -9,9 +9,9 @@
"analyze": "ANALYZE=true next build" "analyze": "ANALYZE=true next build"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/openai": "^0.0.29", "@ai-sdk/openai": "^0.0.31",
"@aws-sdk/client-s3": "3.598.0", "@aws-sdk/client-s3": "3.600.0",
"@aws-sdk/s3-request-presigner": "3.598.0", "@aws-sdk/s3-request-presigner": "3.600.0",
"@next/bundle-analyzer": "14.2.4", "@next/bundle-analyzer": "14.2.4",
"@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-dropdown-menu": "^2.0.6",
"@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/container-queries": "^0.1.1",
@ -19,18 +19,18 @@
"@testing-library/jest-dom": "^6.4.6", "@testing-library/jest-dom": "^6.4.6",
"@testing-library/react": "^16.0.0", "@testing-library/react": "^16.0.0",
"@types/jest": "^29.5.12", "@types/jest": "^29.5.12",
"@types/node": "^20.14.2", "@types/node": "^20.14.6",
"@types/pg": "^8.11.6", "@types/pg": "^8.11.6",
"@types/react": "18.3.3", "@types/react": "18.3.3",
"@types/react-dom": "18.3.0", "@types/react-dom": "18.3.0",
"@typescript-eslint/eslint-plugin": "^7.13.0", "@typescript-eslint/eslint-plugin": "^7.13.1",
"@typescript-eslint/parser": "^7.13.0", "@typescript-eslint/parser": "^7.13.1",
"@upstash/ratelimit": "^1.2.1", "@upstash/ratelimit": "^1.2.1",
"@vercel/analytics": "^1.3.1", "@vercel/analytics": "^1.3.1",
"@vercel/blob": "^0.23.3", "@vercel/blob": "^0.23.3",
"@vercel/kv": "^2.0.0", "@vercel/kv": "^2.0.0",
"@vercel/speed-insights": "^1.0.12", "@vercel/speed-insights": "^1.0.12",
"ai": "^3.1.36", "ai": "^3.2.1",
"autoprefixer": "10.4.19", "autoprefixer": "10.4.19",
"camelcase-keys": "^9.1.3", "camelcase-keys": "^9.1.3",
"clsx": "^2.1.1", "clsx": "^2.1.1",
@ -39,7 +39,7 @@
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-config-next": "14.2.4", "eslint-config-next": "14.2.4",
"exifr": "^7.1.3", "exifr": "^7.1.3",
"framer-motion": "^11.2.10", "framer-motion": "^11.2.11",
"jest": "^29.7.0", "jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0", "jest-environment-jsdom": "^29.7.0",
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
@ -57,7 +57,7 @@
"tailwindcss": "3.4.4", "tailwindcss": "3.4.4",
"ts-exif-parser": "^0.2.2", "ts-exif-parser": "^0.2.2",
"typescript": "5.4.5", "typescript": "5.4.5",
"undici": "^6.19.0", "undici": "^6.19.2",
"use-debounce": "^10.0.1" "use-debounce": "^10.0.1"
} }
} }

382
pnpm-lock.yaml generated
View File

@ -9,14 +9,14 @@ importers:
.: .:
dependencies: dependencies:
'@ai-sdk/openai': '@ai-sdk/openai':
specifier: ^0.0.29 specifier: ^0.0.31
version: 0.0.29(zod@3.23.8) version: 0.0.31(zod@3.23.8)
'@aws-sdk/client-s3': '@aws-sdk/client-s3':
specifier: 3.598.0 specifier: 3.600.0
version: 3.598.0 version: 3.600.0
'@aws-sdk/s3-request-presigner': '@aws-sdk/s3-request-presigner':
specifier: 3.598.0 specifier: 3.600.0
version: 3.598.0 version: 3.600.0
'@next/bundle-analyzer': '@next/bundle-analyzer':
specifier: 14.2.4 specifier: 14.2.4
version: 14.2.4 version: 14.2.4
@ -31,7 +31,7 @@ importers:
version: 0.5.7(tailwindcss@3.4.4) version: 0.5.7(tailwindcss@3.4.4)
'@testing-library/jest-dom': '@testing-library/jest-dom':
specifier: ^6.4.6 specifier: ^6.4.6
version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.2)) version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.6))
'@testing-library/react': '@testing-library/react':
specifier: ^16.0.0 specifier: ^16.0.0
version: 16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -39,8 +39,8 @@ importers:
specifier: ^29.5.12 specifier: ^29.5.12
version: 29.5.12 version: 29.5.12
'@types/node': '@types/node':
specifier: ^20.14.2 specifier: ^20.14.6
version: 20.14.2 version: 20.14.6
'@types/pg': '@types/pg':
specifier: ^8.11.6 specifier: ^8.11.6
version: 8.11.6 version: 8.11.6
@ -51,11 +51,11 @@ importers:
specifier: 18.3.0 specifier: 18.3.0
version: 18.3.0 version: 18.3.0
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^7.13.0 specifier: ^7.13.1
version: 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) version: 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^7.13.0 specifier: ^7.13.1
version: 7.13.0(eslint@8.57.0)(typescript@5.4.5) version: 7.13.1(eslint@8.57.0)(typescript@5.4.5)
'@upstash/ratelimit': '@upstash/ratelimit':
specifier: ^1.2.1 specifier: ^1.2.1
version: 1.2.1 version: 1.2.1
@ -72,8 +72,8 @@ importers:
specifier: ^1.0.12 specifier: ^1.0.12
version: 1.0.12(next@14.2.4(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.17)(vue@3.4.27(typescript@5.4.5)) version: 1.0.12(next@14.2.4(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.17)(vue@3.4.27(typescript@5.4.5))
ai: ai:
specifier: ^3.1.36 specifier: ^3.2.1
version: 3.1.36(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27(typescript@5.4.5))(zod@3.23.8) version: 3.2.1(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27(typescript@5.4.5))(zod@3.23.8)
autoprefixer: autoprefixer:
specifier: 10.4.19 specifier: 10.4.19
version: 10.4.19(postcss@8.4.38) version: 10.4.19(postcss@8.4.38)
@ -99,11 +99,11 @@ importers:
specifier: ^7.1.3 specifier: ^7.1.3
version: 7.1.3 version: 7.1.3
framer-motion: framer-motion:
specifier: ^11.2.10 specifier: ^11.2.11
version: 11.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 11.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
jest: jest:
specifier: ^29.7.0 specifier: ^29.7.0
version: 29.7.0(@types/node@20.14.2) version: 29.7.0(@types/node@20.14.6)
jest-environment-jsdom: jest-environment-jsdom:
specifier: ^29.7.0 specifier: ^29.7.0
version: 29.7.0 version: 29.7.0
@ -153,8 +153,8 @@ importers:
specifier: 5.4.5 specifier: 5.4.5
version: 5.4.5 version: 5.4.5
undici: undici:
specifier: ^6.19.0 specifier: ^6.19.2
version: 6.19.0 version: 6.19.2
use-debounce: use-debounce:
specifier: ^10.0.1 specifier: ^10.0.1
version: 10.0.1(react@18.3.1) version: 10.0.1(react@18.3.1)
@ -164,14 +164,14 @@ packages:
'@adobe/css-tools@4.4.0': '@adobe/css-tools@4.4.0':
resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==}
'@ai-sdk/openai@0.0.29': '@ai-sdk/openai@0.0.31':
resolution: {integrity: sha512-LctoOAlOX7bI3dQ5IA9DXBmHhhb2l59pg+aFclIp0qR86bqrB7eEH/odu8wn+yWjPy90D40aU0E1sNDYz985vA==} resolution: {integrity: sha512-7ehX2N0NzCdxUOYXutwYgu6gdWO+zS/v8pWEd7VW8QpNq3equ0VZ0j+pDUNv4f3GJ449QwySb6+V+DHM9W/pLg==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.0.0 zod: ^3.0.0
'@ai-sdk/provider-utils@0.0.14': '@ai-sdk/provider-utils@0.0.15':
resolution: {integrity: sha512-PCQFN3MlC6DShS/81IFU9NVvt9OekQGiZTEowRc2AwAwWrDsv7er3UkcMswFAL/Z7xZKjgu0dZTNH1z9oUlo7A==} resolution: {integrity: sha512-eTkIaZc/Ud96DYG40lLuKWJvZ2GoW/wT4KH9r1f3wGUhj5wgQN+bzgdI57z60VOEDuMmDVuILVnTLFe0HNT5Iw==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.0.0 zod: ^3.0.0
@ -183,17 +183,20 @@ packages:
resolution: {integrity: sha512-NzkrtREQpHID1cTqY/C4CI30PVOaXWKYytDR2EcytmFgnP7Z6+CrGIA/YCnNhYAuUm6Nx+nGpRL/Hmyrv7NYzg==} resolution: {integrity: sha512-NzkrtREQpHID1cTqY/C4CI30PVOaXWKYytDR2EcytmFgnP7Z6+CrGIA/YCnNhYAuUm6Nx+nGpRL/Hmyrv7NYzg==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@ai-sdk/react@0.0.2': '@ai-sdk/react@0.0.4':
resolution: {integrity: sha512-segG03b5Gdt5h2Q41Ylfn88Rv5OiyXBZOi1ycQ/4MSkQX0D6WLJ8QhNIPkI5ie2qLeQA7sVqFLVuDTnpZQtDSg==} resolution: {integrity: sha512-YPvp81onTxNlnOWolyjvappS5y9pMkZwWKMxrqwMimaJI4NWquPrAeHCYqzaVAb/+RKaveEGSvyYs/SD8AO6ig==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
react: ^18 || ^19 react: ^18 || ^19
zod: ^3.0.0
peerDependenciesMeta: peerDependenciesMeta:
react: react:
optional: true optional: true
zod:
optional: true
'@ai-sdk/solid@0.0.2': '@ai-sdk/solid@0.0.4':
resolution: {integrity: sha512-zGj01mXzar10XwRwWGb0tQ4dLf4M3lGGdcZ2eDm79BN2U4KhNtEwyELKg+EaKdqHgfYJDyiotuqKjT4bcEFttQ==} resolution: {integrity: sha512-1X/vauXG+V0Hsb2P8kZFKaDrderTtB/7XdHZ/UkSMzTk8k0twx9OEXgztW8Rggh51t6sdI7mUoqAY5Khvjf01w==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
solid-js: ^1.7.7 solid-js: ^1.7.7
@ -201,8 +204,8 @@ packages:
solid-js: solid-js:
optional: true optional: true
'@ai-sdk/svelte@0.0.2': '@ai-sdk/svelte@0.0.4':
resolution: {integrity: sha512-q5heL7XxDzm2z3mxEESZuTx4rgOKMiKA5UkobFrUQgdJeE2jk/Efyl+1urvU8JWOZ5gokDS8beW1WA10LuuIvw==} resolution: {integrity: sha512-LVxg9/60ARX8AQIswyDx53HQlQQH91yUOThhUA0x9s2BcxgpDgDN37imynnoZbU7lvA5M9NvwlinkmUdJzUVTA==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
svelte: ^3.0.0 || ^4.0.0 svelte: ^3.0.0 || ^4.0.0
@ -210,12 +213,17 @@ packages:
svelte: svelte:
optional: true optional: true
'@ai-sdk/ui-utils@0.0.2': '@ai-sdk/ui-utils@0.0.4':
resolution: {integrity: sha512-CpWKvYO99UC72oHUts5MrJGPHEoOWrxhN4R8KjeHanZn7cosJ3bal++seSGJrwDz2ImqrpfAdRHmQtdbsCCOyQ==} resolution: {integrity: sha512-vUfuqVOZV3MyFokAduQyJsnDP00qzyZut6mizFscXlCOmiiW3FAnu/XEnMEwCmf7yUG7O4v7Xa2zd4X1tsN5pg==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
peerDependenciesMeta:
zod:
optional: true
'@ai-sdk/vue@0.0.2': '@ai-sdk/vue@0.0.4':
resolution: {integrity: sha512-AfhB1YbdvqeZKheBsjeRsYZOJK2N/InC0VtWook08jiLgI47cau444Bj5dmx6401a1de/3tjw218G4rpJM/icA==} resolution: {integrity: sha512-gWyvenqPi1FC8tvczKhla4pCDTVMXvXHpiIJaBn7fRNq2vO7gDSAr9O//SCSPGY3l1aUCKLgKJbbeoXiTRSGBQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
vue: ^3.3.4 vue: ^3.3.4
@ -268,20 +276,20 @@ packages:
'@aws-crypto/util@5.2.0': '@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
'@aws-sdk/client-s3@3.598.0': '@aws-sdk/client-s3@3.600.0':
resolution: {integrity: sha512-UMxftsgF6j1vzm4Qd9vQJHs2he1NQCWWV8esZfmNFq23OpUC2BPMxkqi13ZQ9tnTAZUNs7yFT/x4Zsi/wpRZEw==} resolution: {integrity: sha512-iYoKbJTputbf+ubkX6gSK/y/4uJEBRaXZ18jykLdBQ8UJuGrk2gqvV8h7OlGAhToCeysmmMqM0vDWyLt6lP8nw==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/client-sso-oidc@3.598.0': '@aws-sdk/client-sso-oidc@3.600.0':
resolution: {integrity: sha512-jfdH1pAO9Tt8Nkta/JJLoUnwl7jaRdxToQTJfUtE+o3+0JP5sA4LfC2rBkJSWcU5BdAA+kyOs5Lv776DlN04Vg==} resolution: {integrity: sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/client-sso@3.598.0': '@aws-sdk/client-sso@3.598.0':
resolution: {integrity: sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==} resolution: {integrity: sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/client-sts@3.598.0': '@aws-sdk/client-sts@3.600.0':
resolution: {integrity: sha512-bXhz/cHL0iB9UH9IFtMaJJf4F8mV+HzncETCRFzZ9SyUMt5rP9j8A7VZknqGYSx/6mI8SsB1XJQkWSbhn6FiSQ==} resolution: {integrity: sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/core@3.598.0': '@aws-sdk/core@3.598.0':
@ -302,8 +310,8 @@ packages:
peerDependencies: peerDependencies:
'@aws-sdk/client-sts': ^3.598.0 '@aws-sdk/client-sts': ^3.598.0
'@aws-sdk/credential-provider-node@3.598.0': '@aws-sdk/credential-provider-node@3.600.0':
resolution: {integrity: sha512-sXTlqL5I/awlF9Dg2MQ17SfrEaABVnsj2mf4jF5qQrIRhfbvQOIYdEqdy8Rn1AWlJMz/N450SGzc0XJ5owxxqw==} resolution: {integrity: sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/credential-provider-process@3.598.0': '@aws-sdk/credential-provider-process@3.598.0':
@ -368,8 +376,8 @@ packages:
resolution: {integrity: sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==} resolution: {integrity: sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/s3-request-presigner@3.598.0': '@aws-sdk/s3-request-presigner@3.600.0':
resolution: {integrity: sha512-IC06/HrZNlYxdyKH5+4A9B98NwcxJjgXOSUV581X7GpqHHspZ0T6tih8shBus3zzW8WfVqRAhJVwZtfMY55hdw==} resolution: {integrity: sha512-MYRwgti1DDc9/Q9AzvTQy0Ih0j4vLe0zYLV3qtSI0H8G02yRqTzet2s/76pUNOYJK9ASSgcxQ9yeV9EGKBwndQ==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
'@aws-sdk/signature-v4-multi-region@3.598.0': '@aws-sdk/signature-v4-multi-region@3.598.0':
@ -1528,8 +1536,8 @@ packages:
'@types/json5@0.0.29': '@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/node@20.14.2': '@types/node@20.14.6':
resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} resolution: {integrity: sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==}
'@types/pg@8.11.6': '@types/pg@8.11.6':
resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
@ -1555,8 +1563,8 @@ packages:
'@types/yargs@17.0.32': '@types/yargs@17.0.32':
resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
'@typescript-eslint/eslint-plugin@7.13.0': '@typescript-eslint/eslint-plugin@7.13.1':
resolution: {integrity: sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==} resolution: {integrity: sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^7.0.0 '@typescript-eslint/parser': ^7.0.0
@ -1566,8 +1574,8 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/parser@7.13.0': '@typescript-eslint/parser@7.13.1':
resolution: {integrity: sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==} resolution: {integrity: sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
@ -1586,16 +1594,16 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/scope-manager@7.13.0': '@typescript-eslint/scope-manager@7.13.1':
resolution: {integrity: sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==} resolution: {integrity: sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/scope-manager@7.2.0': '@typescript-eslint/scope-manager@7.2.0':
resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
'@typescript-eslint/type-utils@7.13.0': '@typescript-eslint/type-utils@7.13.1':
resolution: {integrity: sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==} resolution: {integrity: sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
@ -1604,16 +1612,16 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/types@7.13.0': '@typescript-eslint/types@7.13.1':
resolution: {integrity: sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==} resolution: {integrity: sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/types@7.2.0': '@typescript-eslint/types@7.2.0':
resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
'@typescript-eslint/typescript-estree@7.13.0': '@typescript-eslint/typescript-estree@7.13.1':
resolution: {integrity: sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==} resolution: {integrity: sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -1630,14 +1638,14 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/utils@7.13.0': '@typescript-eslint/utils@7.13.1':
resolution: {integrity: sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==} resolution: {integrity: sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.13.0': '@typescript-eslint/visitor-keys@7.13.1':
resolution: {integrity: sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==} resolution: {integrity: sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/visitor-keys@7.2.0': '@typescript-eslint/visitor-keys@7.2.0':
@ -1753,8 +1761,8 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'} engines: {node: '>= 6.0.0'}
ai@3.1.36: ai@3.2.1:
resolution: {integrity: sha512-mYAMofD43mrdMa4m0Bd3W/xsrjJeAMBg+jBDZtWdQWb+mipE7gY0CVbcG4AgEYXkJdPFV7/I8d7fC6QKfAw5+w==} resolution: {integrity: sha512-6C2rGQLeZmhbjPBOZy2IU8aGg2c9btL8QKWS+dT2Pyxik2ue28FbEsOWQ2O1DOG/5NLX6VM6yNXMlBem3N59Cg==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
openai: ^4.42.0 openai: ^4.42.0
@ -2521,8 +2529,8 @@ packages:
fraction.js@4.3.7: fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
framer-motion@11.2.10: framer-motion@11.2.11:
resolution: {integrity: sha512-/gr3PLZUVFCc86a9MqCUboVrALscrdluzTb3yew+2/qKBU8CX6nzs918/SRBRCqaPbx0TZP10CB6yFgK2C5cYQ==} resolution: {integrity: sha512-n+ozoEzgJu/2h9NoQMokF+CwNqIRVyuRC4RwMPwklfrrTjbVV32k9uBIgqYAwn7Jfpt5LuDVCtT57MWz1FbaLw==}
peerDependencies: peerDependencies:
'@emotion/is-prop-valid': '*' '@emotion/is-prop-valid': '*'
react: ^18.0.0 react: ^18.0.0
@ -4131,8 +4139,8 @@ packages:
resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
engines: {node: '>=14.0'} engines: {node: '>=14.0'}
undici@6.19.0: undici@6.19.2:
resolution: {integrity: sha512-9gGwbSLgYMjp4r6M5P9bhqhx1E+RyUIHqZE0r7BmrRoqroJUG6xlVu5TXH9DnwmCPLkcaVNrcYtxUE9d3InnyQ==} resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==}
engines: {node: '>=18.17'} engines: {node: '>=18.17'}
universalify@0.2.0: universalify@0.2.0:
@ -4339,13 +4347,13 @@ snapshots:
'@adobe/css-tools@4.4.0': {} '@adobe/css-tools@4.4.0': {}
'@ai-sdk/openai@0.0.29(zod@3.23.8)': '@ai-sdk/openai@0.0.31(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/provider': 0.0.10 '@ai-sdk/provider': 0.0.10
'@ai-sdk/provider-utils': 0.0.14(zod@3.23.8) '@ai-sdk/provider-utils': 0.0.15(zod@3.23.8)
zod: 3.23.8 zod: 3.23.8
'@ai-sdk/provider-utils@0.0.14(zod@3.23.8)': '@ai-sdk/provider-utils@0.0.15(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/provider': 0.0.10 '@ai-sdk/provider': 0.0.10
eventsource-parser: 1.1.2 eventsource-parser: 1.1.2
@ -4358,19 +4366,18 @@ snapshots:
dependencies: dependencies:
json-schema: 0.4.0 json-schema: 0.4.0
'@ai-sdk/react@0.0.2(react@18.3.1)(zod@3.23.8)': '@ai-sdk/react@0.0.4(react@18.3.1)(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/provider-utils': 0.0.14(zod@3.23.8) '@ai-sdk/provider-utils': 0.0.15(zod@3.23.8)
'@ai-sdk/ui-utils': 0.0.2(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.4(zod@3.23.8)
swr: 2.2.0(react@18.3.1) swr: 2.2.0(react@18.3.1)
optionalDependencies: optionalDependencies:
react: 18.3.1 react: 18.3.1
transitivePeerDependencies: zod: 3.23.8
- zod
'@ai-sdk/solid@0.0.2(solid-js@1.8.17)(zod@3.23.8)': '@ai-sdk/solid@0.0.4(solid-js@1.8.17)(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/ui-utils': 0.0.2(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.4(zod@3.23.8)
solid-swr-store: 0.10.7(solid-js@1.8.17)(swr-store@0.10.6) solid-swr-store: 0.10.7(solid-js@1.8.17)(swr-store@0.10.6)
swr-store: 0.10.6 swr-store: 0.10.6
optionalDependencies: optionalDependencies:
@ -4378,25 +4385,26 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- zod - zod
'@ai-sdk/svelte@0.0.2(svelte@4.2.17)(zod@3.23.8)': '@ai-sdk/svelte@0.0.4(svelte@4.2.17)(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/provider-utils': 0.0.14(zod@3.23.8) '@ai-sdk/provider-utils': 0.0.15(zod@3.23.8)
'@ai-sdk/ui-utils': 0.0.2(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.4(zod@3.23.8)
sswr: 2.1.0(svelte@4.2.17) sswr: 2.1.0(svelte@4.2.17)
optionalDependencies: optionalDependencies:
svelte: 4.2.17 svelte: 4.2.17
transitivePeerDependencies: transitivePeerDependencies:
- zod - zod
'@ai-sdk/ui-utils@0.0.2(zod@3.23.8)': '@ai-sdk/ui-utils@0.0.4(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/provider-utils': 0.0.14(zod@3.23.8) '@ai-sdk/provider-utils': 0.0.15(zod@3.23.8)
transitivePeerDependencies: secure-json-parse: 2.7.0
- zod optionalDependencies:
zod: 3.23.8
'@ai-sdk/vue@0.0.2(vue@3.4.27(typescript@5.4.5))(zod@3.23.8)': '@ai-sdk/vue@0.0.4(vue@3.4.27(typescript@5.4.5))(zod@3.23.8)':
dependencies: dependencies:
'@ai-sdk/ui-utils': 0.0.2(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.4(zod@3.23.8)
swrv: 1.0.4(vue@3.4.27(typescript@5.4.5)) swrv: 1.0.4(vue@3.4.27(typescript@5.4.5))
optionalDependencies: optionalDependencies:
vue: 3.4.27(typescript@5.4.5) vue: 3.4.27(typescript@5.4.5)
@ -4467,15 +4475,15 @@ snapshots:
'@smithy/util-utf8': 2.3.0 '@smithy/util-utf8': 2.3.0
tslib: 2.6.2 tslib: 2.6.2
'@aws-sdk/client-s3@3.598.0': '@aws-sdk/client-s3@3.600.0':
dependencies: dependencies:
'@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/client-sso-oidc': 3.598.0 '@aws-sdk/client-sso-oidc': 3.600.0
'@aws-sdk/client-sts': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/core': 3.598.0 '@aws-sdk/core': 3.598.0
'@aws-sdk/credential-provider-node': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)) '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))
'@aws-sdk/middleware-bucket-endpoint': 3.598.0 '@aws-sdk/middleware-bucket-endpoint': 3.598.0
'@aws-sdk/middleware-expect-continue': 3.598.0 '@aws-sdk/middleware-expect-continue': 3.598.0
'@aws-sdk/middleware-flexible-checksums': 3.598.0 '@aws-sdk/middleware-flexible-checksums': 3.598.0
@ -4530,13 +4538,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/client-sso-oidc@3.598.0': '@aws-sdk/client-sso-oidc@3.600.0':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/client-sts': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/core': 3.598.0 '@aws-sdk/core': 3.598.0
'@aws-sdk/credential-provider-node': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)) '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))
'@aws-sdk/middleware-host-header': 3.598.0 '@aws-sdk/middleware-host-header': 3.598.0
'@aws-sdk/middleware-logger': 3.598.0 '@aws-sdk/middleware-logger': 3.598.0
'@aws-sdk/middleware-recursion-detection': 3.598.0 '@aws-sdk/middleware-recursion-detection': 3.598.0
@ -4618,13 +4626,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- aws-crt - aws-crt
'@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)': '@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)':
dependencies: dependencies:
'@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/sha256-js': 5.2.0
'@aws-sdk/client-sso-oidc': 3.598.0 '@aws-sdk/client-sso-oidc': 3.600.0
'@aws-sdk/core': 3.598.0 '@aws-sdk/core': 3.598.0
'@aws-sdk/credential-provider-node': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)) '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))
'@aws-sdk/middleware-host-header': 3.598.0 '@aws-sdk/middleware-host-header': 3.598.0
'@aws-sdk/middleware-logger': 3.598.0 '@aws-sdk/middleware-logger': 3.598.0
'@aws-sdk/middleware-recursion-detection': 3.598.0 '@aws-sdk/middleware-recursion-detection': 3.598.0
@ -4693,14 +4701,14 @@ snapshots:
'@smithy/util-stream': 3.0.2 '@smithy/util-stream': 3.0.2
tslib: 2.6.2 tslib: 2.6.2
'@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0))': '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))':
dependencies: dependencies:
'@aws-sdk/client-sts': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-env': 3.598.0
'@aws-sdk/credential-provider-http': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0
'@aws-sdk/credential-provider-process': 3.598.0 '@aws-sdk/credential-provider-process': 3.598.0
'@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)) '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))
'@aws-sdk/types': 3.598.0 '@aws-sdk/types': 3.598.0
'@smithy/credential-provider-imds': 3.1.1 '@smithy/credential-provider-imds': 3.1.1
'@smithy/property-provider': 3.1.1 '@smithy/property-provider': 3.1.1
@ -4711,14 +4719,14 @@ snapshots:
- '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sso-oidc'
- aws-crt - aws-crt
'@aws-sdk/credential-provider-node@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0))': '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))':
dependencies: dependencies:
'@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-env': 3.598.0
'@aws-sdk/credential-provider-http': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0
'@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0)(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)) '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))
'@aws-sdk/credential-provider-process': 3.598.0 '@aws-sdk/credential-provider-process': 3.598.0
'@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)) '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))
'@aws-sdk/types': 3.598.0 '@aws-sdk/types': 3.598.0
'@smithy/credential-provider-imds': 3.1.1 '@smithy/credential-provider-imds': 3.1.1
'@smithy/property-provider': 3.1.1 '@smithy/property-provider': 3.1.1
@ -4738,10 +4746,10 @@ snapshots:
'@smithy/types': 3.1.0 '@smithy/types': 3.1.0
tslib: 2.6.2 tslib: 2.6.2
'@aws-sdk/credential-provider-sso@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)': '@aws-sdk/credential-provider-sso@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)':
dependencies: dependencies:
'@aws-sdk/client-sso': 3.598.0 '@aws-sdk/client-sso': 3.598.0
'@aws-sdk/token-providers': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/token-providers': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/types': 3.598.0 '@aws-sdk/types': 3.598.0
'@smithy/property-provider': 3.1.1 '@smithy/property-provider': 3.1.1
'@smithy/shared-ini-file-loader': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1
@ -4751,9 +4759,9 @@ snapshots:
- '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sso-oidc'
- aws-crt - aws-crt
'@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.598.0(@aws-sdk/client-sso-oidc@3.598.0))': '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))':
dependencies: dependencies:
'@aws-sdk/client-sts': 3.598.0(@aws-sdk/client-sso-oidc@3.598.0) '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)
'@aws-sdk/types': 3.598.0 '@aws-sdk/types': 3.598.0
'@smithy/property-provider': 3.1.1 '@smithy/property-provider': 3.1.1
'@smithy/types': 3.1.0 '@smithy/types': 3.1.0
@ -4858,7 +4866,7 @@ snapshots:
'@smithy/util-middleware': 3.0.1 '@smithy/util-middleware': 3.0.1
tslib: 2.6.2 tslib: 2.6.2
'@aws-sdk/s3-request-presigner@3.598.0': '@aws-sdk/s3-request-presigner@3.600.0':
dependencies: dependencies:
'@aws-sdk/signature-v4-multi-region': 3.598.0 '@aws-sdk/signature-v4-multi-region': 3.598.0
'@aws-sdk/types': 3.598.0 '@aws-sdk/types': 3.598.0
@ -4878,9 +4886,9 @@ snapshots:
'@smithy/types': 3.1.0 '@smithy/types': 3.1.0
tslib: 2.6.2 tslib: 2.6.2
'@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.598.0)': '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)':
dependencies: dependencies:
'@aws-sdk/client-sso-oidc': 3.598.0 '@aws-sdk/client-sso-oidc': 3.600.0
'@aws-sdk/types': 3.598.0 '@aws-sdk/types': 3.598.0
'@smithy/property-provider': 3.1.1 '@smithy/property-provider': 3.1.1
'@smithy/shared-ini-file-loader': 3.1.1 '@smithy/shared-ini-file-loader': 3.1.1
@ -5295,7 +5303,7 @@ snapshots:
'@jest/console@29.7.0': '@jest/console@29.7.0':
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
chalk: 4.1.2 chalk: 4.1.2
jest-message-util: 29.7.0 jest-message-util: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
@ -5308,14 +5316,14 @@ snapshots:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.9.0 ci-info: 3.9.0
exit: 0.1.2 exit: 0.1.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
jest-changed-files: 29.7.0 jest-changed-files: 29.7.0
jest-config: 29.7.0(@types/node@20.14.2) jest-config: 29.7.0(@types/node@20.14.6)
jest-haste-map: 29.7.0 jest-haste-map: 29.7.0
jest-message-util: 29.7.0 jest-message-util: 29.7.0
jest-regex-util: 29.6.3 jest-regex-util: 29.6.3
@ -5340,7 +5348,7 @@ snapshots:
dependencies: dependencies:
'@jest/fake-timers': 29.7.0 '@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
jest-mock: 29.7.0 jest-mock: 29.7.0
'@jest/expect-utils@29.7.0': '@jest/expect-utils@29.7.0':
@ -5358,7 +5366,7 @@ snapshots:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0 '@sinonjs/fake-timers': 10.3.0
'@types/node': 20.14.2 '@types/node': 20.14.6
jest-message-util: 29.7.0 jest-message-util: 29.7.0
jest-mock: 29.7.0 jest-mock: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
@ -5380,7 +5388,7 @@ snapshots:
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
'@types/node': 20.14.2 '@types/node': 20.14.6
chalk: 4.1.2 chalk: 4.1.2
collect-v8-coverage: 1.0.2 collect-v8-coverage: 1.0.2
exit: 0.1.2 exit: 0.1.2
@ -5450,7 +5458,7 @@ snapshots:
'@jest/schemas': 29.6.3 '@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4 '@types/istanbul-reports': 3.0.4
'@types/node': 20.14.2 '@types/node': 20.14.6
'@types/yargs': 17.0.32 '@types/yargs': 17.0.32
chalk: 4.1.2 chalk: 4.1.2
@ -6178,7 +6186,7 @@ snapshots:
lz-string: 1.5.0 lz-string: 1.5.0
pretty-format: 27.5.1 pretty-format: 27.5.1
'@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.2))': '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@20.14.6))':
dependencies: dependencies:
'@adobe/css-tools': 4.4.0 '@adobe/css-tools': 4.4.0
'@babel/runtime': 7.24.5 '@babel/runtime': 7.24.5
@ -6191,7 +6199,7 @@ snapshots:
optionalDependencies: optionalDependencies:
'@jest/globals': 29.7.0 '@jest/globals': 29.7.0
'@types/jest': 29.5.12 '@types/jest': 29.5.12
jest: 29.7.0(@types/node@20.14.2) jest: 29.7.0(@types/node@20.14.6)
'@testing-library/react@16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': '@testing-library/react@16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
@ -6236,7 +6244,7 @@ snapshots:
'@types/graceful-fs@4.1.9': '@types/graceful-fs@4.1.9':
dependencies: dependencies:
'@types/node': 20.14.2 '@types/node': 20.14.6
'@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-coverage@2.0.6': {}
@ -6255,19 +6263,19 @@ snapshots:
'@types/jsdom@20.0.1': '@types/jsdom@20.0.1':
dependencies: dependencies:
'@types/node': 20.14.2 '@types/node': 20.14.6
'@types/tough-cookie': 4.0.5 '@types/tough-cookie': 4.0.5
parse5: 7.1.2 parse5: 7.1.2
'@types/json5@0.0.29': {} '@types/json5@0.0.29': {}
'@types/node@20.14.2': '@types/node@20.14.6':
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
'@types/pg@8.11.6': '@types/pg@8.11.6':
dependencies: dependencies:
'@types/node': 20.14.2 '@types/node': 20.14.6
pg-protocol: 1.6.1 pg-protocol: 1.6.1
pg-types: 4.0.2 pg-types: 4.0.2
@ -6292,14 +6300,14 @@ snapshots:
dependencies: dependencies:
'@types/yargs-parser': 21.0.3 '@types/yargs-parser': 21.0.3
'@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.13.0 '@typescript-eslint/scope-manager': 7.13.1
'@typescript-eslint/type-utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/type-utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.13.0 '@typescript-eslint/visitor-keys': 7.13.1
eslint: 8.57.0 eslint: 8.57.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.1 ignore: 5.3.1
@ -6310,12 +6318,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 7.13.0 '@typescript-eslint/scope-manager': 7.13.1
'@typescript-eslint/types': 7.13.0 '@typescript-eslint/types': 7.13.1
'@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.13.0 '@typescript-eslint/visitor-keys': 7.13.1
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
optionalDependencies: optionalDependencies:
@ -6336,20 +6344,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@7.13.0': '@typescript-eslint/scope-manager@7.13.1':
dependencies: dependencies:
'@typescript-eslint/types': 7.13.0 '@typescript-eslint/types': 7.13.1
'@typescript-eslint/visitor-keys': 7.13.0 '@typescript-eslint/visitor-keys': 7.13.1
'@typescript-eslint/scope-manager@7.2.0': '@typescript-eslint/scope-manager@7.2.0':
dependencies: dependencies:
'@typescript-eslint/types': 7.2.0 '@typescript-eslint/types': 7.2.0
'@typescript-eslint/visitor-keys': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0
'@typescript-eslint/type-utils@7.13.0(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/type-utils@7.13.1(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.4.5)
'@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5) ts-api-utils: 1.3.0(typescript@5.4.5)
@ -6358,14 +6366,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@7.13.0': {} '@typescript-eslint/types@7.13.1': {}
'@typescript-eslint/types@7.2.0': {} '@typescript-eslint/types@7.2.0': {}
'@typescript-eslint/typescript-estree@7.13.0(typescript@5.4.5)': '@typescript-eslint/typescript-estree@7.13.1(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/types': 7.13.0 '@typescript-eslint/types': 7.13.1
'@typescript-eslint/visitor-keys': 7.13.0 '@typescript-eslint/visitor-keys': 7.13.1
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
@ -6392,20 +6400,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@7.13.0(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/utils@7.13.1(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.13.0 '@typescript-eslint/scope-manager': 7.13.1
'@typescript-eslint/types': 7.13.0 '@typescript-eslint/types': 7.13.1
'@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.4.5)
eslint: 8.57.0 eslint: 8.57.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/visitor-keys@7.13.0': '@typescript-eslint/visitor-keys@7.13.1':
dependencies: dependencies:
'@typescript-eslint/types': 7.13.0 '@typescript-eslint/types': 7.13.1
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@7.2.0': '@typescript-eslint/visitor-keys@7.2.0':
@ -6526,15 +6534,15 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
ai@3.1.36(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27(typescript@5.4.5))(zod@3.23.8): ai@3.2.1(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.17)(vue@3.4.27(typescript@5.4.5))(zod@3.23.8):
dependencies: dependencies:
'@ai-sdk/provider': 0.0.10 '@ai-sdk/provider': 0.0.10
'@ai-sdk/provider-utils': 0.0.14(zod@3.23.8) '@ai-sdk/provider-utils': 0.0.15(zod@3.23.8)
'@ai-sdk/react': 0.0.2(react@18.3.1)(zod@3.23.8) '@ai-sdk/react': 0.0.4(react@18.3.1)(zod@3.23.8)
'@ai-sdk/solid': 0.0.2(solid-js@1.8.17)(zod@3.23.8) '@ai-sdk/solid': 0.0.4(solid-js@1.8.17)(zod@3.23.8)
'@ai-sdk/svelte': 0.0.2(svelte@4.2.17)(zod@3.23.8) '@ai-sdk/svelte': 0.0.4(svelte@4.2.17)(zod@3.23.8)
'@ai-sdk/ui-utils': 0.0.2(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.4(zod@3.23.8)
'@ai-sdk/vue': 0.0.2(vue@3.4.27(typescript@5.4.5))(zod@3.23.8) '@ai-sdk/vue': 0.0.4(vue@3.4.27(typescript@5.4.5))(zod@3.23.8)
eventsource-parser: 1.1.2 eventsource-parser: 1.1.2
json-schema: 0.4.0 json-schema: 0.4.0
jsondiffpatch: 0.6.0 jsondiffpatch: 0.6.0
@ -6927,13 +6935,13 @@ snapshots:
cookie@0.6.0: {} cookie@0.6.0: {}
create-jest@29.7.0(@types/node@20.14.2): create-jest@29.7.0(@types/node@20.14.6):
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
chalk: 4.1.2 chalk: 4.1.2
exit: 0.1.2 exit: 0.1.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
jest-config: 29.7.0(@types/node@20.14.2) jest-config: 29.7.0(@types/node@20.14.6)
jest-util: 29.7.0 jest-util: 29.7.0
prompts: 2.4.2 prompts: 2.4.2
transitivePeerDependencies: transitivePeerDependencies:
@ -7204,7 +7212,7 @@ snapshots:
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
@ -7228,7 +7236,7 @@ snapshots:
enhanced-resolve: 5.16.1 enhanced-resolve: 5.16.1
eslint: 8.57.0 eslint: 8.57.0
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)
fast-glob: 3.3.2 fast-glob: 3.3.2
get-tsconfig: 4.7.5 get-tsconfig: 4.7.5
is-core-module: 2.13.1 is-core-module: 2.13.1
@ -7239,11 +7247,11 @@ snapshots:
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-module-utils@2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): eslint-module-utils@2.8.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
transitivePeerDependencies: transitivePeerDependencies:
@ -7260,7 +7268,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0):
dependencies: dependencies:
array-includes: 3.1.8 array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5 array.prototype.findlastindex: 1.2.5
@ -7270,7 +7278,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.13.1 is-core-module: 2.13.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -7281,7 +7289,7 @@ snapshots:
semver: 6.3.1 semver: 6.3.1
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.4.5)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
@ -7504,7 +7512,7 @@ snapshots:
fraction.js@4.3.7: {} fraction.js@4.3.7: {}
framer-motion@11.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1): framer-motion@11.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies: optionalDependencies:
@ -7889,7 +7897,7 @@ snapshots:
'@jest/expect': 29.7.0 '@jest/expect': 29.7.0
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
chalk: 4.1.2 chalk: 4.1.2
co: 4.6.0 co: 4.6.0
dedent: 1.5.3 dedent: 1.5.3
@ -7909,16 +7917,16 @@ snapshots:
- babel-plugin-macros - babel-plugin-macros
- supports-color - supports-color
jest-cli@29.7.0(@types/node@20.14.2): jest-cli@29.7.0(@types/node@20.14.6):
dependencies: dependencies:
'@jest/core': 29.7.0 '@jest/core': 29.7.0
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
chalk: 4.1.2 chalk: 4.1.2
create-jest: 29.7.0(@types/node@20.14.2) create-jest: 29.7.0(@types/node@20.14.6)
exit: 0.1.2 exit: 0.1.2
import-local: 3.1.0 import-local: 3.1.0
jest-config: 29.7.0(@types/node@20.14.2) jest-config: 29.7.0(@types/node@20.14.6)
jest-util: 29.7.0 jest-util: 29.7.0
jest-validate: 29.7.0 jest-validate: 29.7.0
yargs: 17.7.2 yargs: 17.7.2
@ -7928,7 +7936,7 @@ snapshots:
- supports-color - supports-color
- ts-node - ts-node
jest-config@29.7.0(@types/node@20.14.2): jest-config@29.7.0(@types/node@20.14.6):
dependencies: dependencies:
'@babel/core': 7.24.5 '@babel/core': 7.24.5
'@jest/test-sequencer': 29.7.0 '@jest/test-sequencer': 29.7.0
@ -7953,7 +7961,7 @@ snapshots:
slash: 3.0.0 slash: 3.0.0
strip-json-comments: 3.1.1 strip-json-comments: 3.1.1
optionalDependencies: optionalDependencies:
'@types/node': 20.14.2 '@types/node': 20.14.6
transitivePeerDependencies: transitivePeerDependencies:
- babel-plugin-macros - babel-plugin-macros
- supports-color - supports-color
@ -7983,7 +7991,7 @@ snapshots:
'@jest/fake-timers': 29.7.0 '@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/jsdom': 20.0.1 '@types/jsdom': 20.0.1
'@types/node': 20.14.2 '@types/node': 20.14.6
jest-mock: 29.7.0 jest-mock: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
jsdom: 20.0.3 jsdom: 20.0.3
@ -7997,7 +8005,7 @@ snapshots:
'@jest/environment': 29.7.0 '@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0 '@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
jest-mock: 29.7.0 jest-mock: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
@ -8007,7 +8015,7 @@ snapshots:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/graceful-fs': 4.1.9 '@types/graceful-fs': 4.1.9
'@types/node': 20.14.2 '@types/node': 20.14.6
anymatch: 3.1.3 anymatch: 3.1.3
fb-watchman: 2.0.2 fb-watchman: 2.0.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -8046,7 +8054,7 @@ snapshots:
jest-mock@29.7.0: jest-mock@29.7.0:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
jest-util: 29.7.0 jest-util: 29.7.0
jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@ -8081,7 +8089,7 @@ snapshots:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
chalk: 4.1.2 chalk: 4.1.2
emittery: 0.13.1 emittery: 0.13.1
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -8109,7 +8117,7 @@ snapshots:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
chalk: 4.1.2 chalk: 4.1.2
cjs-module-lexer: 1.3.1 cjs-module-lexer: 1.3.1
collect-v8-coverage: 1.0.2 collect-v8-coverage: 1.0.2
@ -8155,7 +8163,7 @@ snapshots:
jest-util@29.7.0: jest-util@29.7.0:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.9.0 ci-info: 3.9.0
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -8174,7 +8182,7 @@ snapshots:
dependencies: dependencies:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.14.2 '@types/node': 20.14.6
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 4.1.2 chalk: 4.1.2
emittery: 0.13.1 emittery: 0.13.1
@ -8183,17 +8191,17 @@ snapshots:
jest-worker@29.7.0: jest-worker@29.7.0:
dependencies: dependencies:
'@types/node': 20.14.2 '@types/node': 20.14.6
jest-util: 29.7.0 jest-util: 29.7.0
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
jest@29.7.0(@types/node@20.14.2): jest@29.7.0(@types/node@20.14.6):
dependencies: dependencies:
'@jest/core': 29.7.0 '@jest/core': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
import-local: 3.1.0 import-local: 3.1.0
jest-cli: 29.7.0(@types/node@20.14.2) jest-cli: 29.7.0(@types/node@20.14.6)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- babel-plugin-macros - babel-plugin-macros
@ -9308,7 +9316,7 @@ snapshots:
dependencies: dependencies:
'@fastify/busboy': 2.1.1 '@fastify/busboy': 2.1.1
undici@6.19.0: {} undici@6.19.2: {}
universalify@0.2.0: {} universalify@0.2.0: {}

View File

@ -7,7 +7,7 @@ export default async function AdminConfigurationPage() {
return ( return (
<SiteGrid <SiteGrid
contentMain={ contentMain={
<div className="space-y-6"> <div className="space-y-4">
<div className="flex items-center"> <div className="flex items-center">
<div className="flex-grow"> <div className="flex-grow">
App Configuration App Configuration

View File

@ -2,15 +2,18 @@ import { ReactNode } from 'react';
import { clsx } from 'clsx/lite'; import { clsx } from 'clsx/lite';
import ExperimentalBadge from './ExperimentalBadge'; import ExperimentalBadge from './ExperimentalBadge';
import Badge from './Badge'; import Badge from './Badge';
import ResponsiveText from './primitives/ResponsiveText';
export default function Checklist({ export default function Checklist({
title, title,
titleShort,
icon, icon,
optional, optional,
experimental, experimental,
children, children,
}: { }: {
title: string title: string
titleShort?: string
icon?: ReactNode icon?: ReactNode
optional?: boolean optional?: boolean
experimental?: boolean experimental?: boolean
@ -25,7 +28,9 @@ export default function Checklist({
)}> )}>
<span className="w-7 shrink-0">{icon}</span> <span className="w-7 shrink-0">{icon}</span>
<span className="inline-flex flex-wrap items-center gap-y-1 gap-x-1.5"> <span className="inline-flex flex-wrap items-center gap-y-1 gap-x-1.5">
{title} <ResponsiveText shortText={titleShort}>
{title}
</ResponsiveText>
{optional && {optional &&
<Badge type="small">Optional</Badge>} <Badge type="small">Optional</Badge>}
{experimental && {experimental &&

View File

@ -19,11 +19,17 @@ export default function ResponsiveDate({
className={clsx(className, 'uppercase')} className={clsx(className, 'uppercase')}
> >
{/* Small */} {/* Small */}
<span className="xs:hidden"> <span
className="xs:hidden"
aria-hidden
>
{formatDate(date, 'short')} {formatDate(date, 'short')}
</span> </span>
{/* Medium */} {/* Medium */}
<span className="hidden xs:inline-block sm:hidden"> <span
className="hidden xs:inline-block sm:hidden"
aria-hidden
>
{formatDate(date, 'medium')} {formatDate(date, 'medium')}
</span> </span>
{/* Large */} {/* Large */}

View File

@ -0,0 +1,22 @@
import { ReactNode } from 'react';
export default function ResponsiveText({
children,
shortText,
}: {
children: ReactNode
shortText?: string
}) {
return (
<>
{/* Full text */}
<span className="hidden sm:inline">
{children}
</span>
{/* Short text */}
<span className="sm:hidden" aria-hidden>
{shortText ?? children}
</span>
</>
);
}

View File

@ -166,360 +166,371 @@ export default function SiteChecklistClient({
</ErrorNote>; </ErrorNote>;
return ( return (
<div className="max-w-xl space-y-6 w-full"> <div className="max-w-xl w-full">
<Checklist <div className="space-y-6">
title="Storage" <Checklist
icon={<BiData size={16} />} title="Storage"
> icon={<BiData size={16} />}
<ChecklistRow
title={hasDatabase && isTestingConnections
? 'Testing database connection'
: 'Setup database'}
status={hasDatabase}
isPending={hasDatabase && isTestingConnections}
> >
{databaseError && <ChecklistRow
renderConnectionError('Database', databaseError)} title={hasDatabase && isTestingConnections
{hasVercelPostgres ? 'Testing database connection'
? renderSubStatus('checked', 'Vercel Postgres: connected') : 'Setup database'}
: renderSubStatus('optional', <> status={hasDatabase}
Vercel Postgres: isPending={hasDatabase && isTestingConnections}
{' '} >
{renderLink( {databaseError &&
// eslint-disable-next-line max-len renderConnectionError('Database', databaseError)}
'https://vercel.com/docs/storage/vercel-postgres/quickstart#create-a-postgres-database', {hasVercelPostgres
'create store', ? renderSubStatus('checked', 'Vercel Postgres: connected')
)} : renderSubStatus('optional', <>
{' '} Vercel Postgres:
and connect to project {' '}
</>)} {renderLink(
{hasDatabase && !hasVercelPostgres &&
renderSubStatus('checked', <>
Postgres-compatible: connected
{' '}
(SSL {isPostgresSslEnabled ? 'enabled' : 'disabled'})
</>)}
</ChecklistRow>
<ChecklistRow
title={
hasStorageProvider && isTestingConnections
? 'Testing storage connection'
: !hasStorageProvider
? 'Setup storage (one of the following)'
: hasMultipleStorageProviders
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
? `Setup storage (new uploads go to: ${labelForStorage(currentStorage)})` 'https://vercel.com/docs/storage/vercel-postgres/quickstart#create-a-postgres-database',
: 'Setup storage'} 'create store',
status={hasStorageProvider} )}
isPending={hasStorageProvider && isTestingConnections} {' '}
and connect to project
</>)}
{hasDatabase && !hasVercelPostgres &&
renderSubStatus('checked', <>
Postgres-compatible: connected
{' '}
(SSL {isPostgresSslEnabled ? 'enabled' : 'disabled'})
</>)}
</ChecklistRow>
<ChecklistRow
title={
hasStorageProvider && isTestingConnections
? 'Testing storage connection'
: !hasStorageProvider
? 'Setup storage (one of the following)'
: hasMultipleStorageProviders
// eslint-disable-next-line max-len
? `Setup storage (new uploads go to: ${labelForStorage(currentStorage)})`
: 'Setup storage'}
status={hasStorageProvider}
isPending={hasStorageProvider && isTestingConnections}
>
{storageError &&
renderConnectionError('Storage', storageError)}
{hasVercelBlobStorage
? renderSubStatus('checked', 'Vercel Blob: connected')
: renderSubStatus('optional', <>
{labelForStorage('vercel-blob')}:
{' '}
{renderLink(
// eslint-disable-next-line max-len
'https://vercel.com/docs/storage/vercel-blob/quickstart#create-a-blob-store',
'create store',
)}
{' '}
and connect to project
</>
)}
{hasCloudflareR2Storage
? renderSubStatus('checked', 'Cloudflare R2: connected')
: renderSubStatus('optional', <>
{labelForStorage('cloudflare-r2')}:
{' '}
{renderLink(
'https://github.com/sambecker/exif-photo-blog#cloudflare-r2',
'create/configure bucket',
)}
</>)}
{hasAwsS3Storage
? renderSubStatus('checked', 'AWS S3: connected')
: renderSubStatus('optional', <>
{labelForStorage('aws-s3')}:
{' '}
{renderLink(
'https://github.com/sambecker/exif-photo-blog#aws-s3',
'create/configure bucket',
)}
</>)}
</ChecklistRow>
</Checklist>
<Checklist
title="Authentication"
icon={<BiLockAlt size={16} />}
> >
{storageError && <ChecklistRow
renderConnectionError('Storage', storageError)} title={!hasAuthSecret && isTestingConnections
{hasVercelBlobStorage ? 'Generating secret'
? renderSubStatus('checked', 'Vercel Blob: connected') : 'Setup auth'}
: renderSubStatus('optional', <> status={hasAuthSecret}
{labelForStorage('vercel-blob')}: isPending={!hasAuthSecret && isTestingConnections}
{' '} >
Store auth secret in environment variable:
{!hasAuthSecret &&
<div className="overflow-x-auto">
<InfoBlock className="my-1.5 inline-flex" padding="tight">
<div className={clsx(
'flex flex-nowrap items-center gap-2 leading-none -mx-1',
)}>
{secret ? <span>{secret}</span> : <Spinner />}
<div
className="flex items-center gap-0.5 translate-y-[-2px]"
>
{renderCopyButton('Secret', secret)}
</div>
</div>
</InfoBlock>
</div>}
{renderEnvVars(['AUTH_SECRET'])}
</ChecklistRow>
<ChecklistRow
title="Setup admin user"
status={hasAdminUser}
>
Store admin email/password
{' '}
in environment variables:
{renderEnvVars([
'ADMIN_EMAIL',
'ADMIN_PASSWORD',
])}
</ChecklistRow>
</Checklist>
<Checklist
title="Content"
icon={<BiPencil size={16} />}
>
<ChecklistRow
title="Add custom domain"
status={hasDomain}
>
Store in environment variable (displayed in top-right nav):
{renderEnvVars(['NEXT_PUBLIC_SITE_DOMAIN'])}
</ChecklistRow>
<ChecklistRow
title="Add title"
status={hasTitle}
optional
>
Store in environment variable (used in page titles):
{renderEnvVars(['NEXT_PUBLIC_SITE_TITLE'])}
</ChecklistRow>
<ChecklistRow
title="Add description"
status={hasDescription}
optional
>
Store in environment variable (mainly used for OG meta):
{renderEnvVars(['NEXT_PUBLIC_SITE_DESCRIPTION'])}
</ChecklistRow>
</Checklist>
{!simplifiedView && <>
<Checklist
title="AI Text Generation"
titleShort="AI"
icon={<HiSparkles />}
experimental
optional
>
<ChecklistRow
title={isAiTextGenerationEnabled && isTestingConnections
? 'Testing OpenAI connection'
: 'Add OpenAI Secret Key'}
status={isAiTextGenerationEnabled}
isPending={isAiTextGenerationEnabled && isTestingConnections}
optional
>
{aiError &&
renderConnectionError('OpenAI', aiError)}
Store your OpenAI secret key in order to add experimental support
for AI-generated text descriptions and enable an invisible field
called {'"Semantic Description"'} used to support CMD-K search
{renderEnvVars(['OPENAI_SECRET_KEY'])}
</ChecklistRow>
<ChecklistRow
title={hasVercelKv && isTestingConnections
? 'Testing KV connection'
: 'Enable Rate Limiting'}
status={hasVercelKv}
isPending={hasVercelKv && isTestingConnections}
optional
>
{kvError &&
renderConnectionError('Vercel KV', kvError)}
{renderLink( {renderLink(
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
'https://vercel.com/docs/storage/vercel-blob/quickstart#create-a-blob-store', 'https://vercel.com/docs/storage/vercel-kv/quickstart#create-a-kv-database',
'create store', 'Create Vercel KV store',
)} )}
{' '}
and connect to project
</>
)}
{hasCloudflareR2Storage
? renderSubStatus('checked', 'Cloudflare R2: connected')
: renderSubStatus('optional', <>
{labelForStorage('cloudflare-r2')}:
{' '} {' '}
{renderLink( and connect to project in order to enable rate limiting
'https://github.com/sambecker/exif-photo-blog#cloudflare-r2', </ChecklistRow>
'create/configure bucket', <ChecklistRow
)}
</>)}
{hasAwsS3Storage
? renderSubStatus('checked', 'AWS S3: connected')
: renderSubStatus('optional', <>
{labelForStorage('aws-s3')}:
{' '}
{renderLink(
'https://github.com/sambecker/exif-photo-blog#aws-s3',
'create/configure bucket',
)}
</>)}
</ChecklistRow>
</Checklist>
<Checklist
title="Authentication"
icon={<BiLockAlt size={16} />}
>
<ChecklistRow
title={!hasAuthSecret && isTestingConnections
? 'Generating secret'
: 'Setup auth'}
status={hasAuthSecret}
isPending={!hasAuthSecret && isTestingConnections}
>
Store auth secret in environment variable:
{!hasAuthSecret &&
<div className="overflow-x-auto">
<InfoBlock className="my-1.5 inline-flex" padding="tight">
<div className={clsx(
'flex flex-nowrap items-center gap-2 leading-none -mx-1',
)}>
{secret ? <span>{secret}</span> : <Spinner />}
<div className="flex items-center gap-0.5 translate-y-[-2px]">
{renderCopyButton('Secret', secret)}
</div>
</div>
</InfoBlock>
</div>}
{renderEnvVars(['AUTH_SECRET'])}
</ChecklistRow>
<ChecklistRow
title="Setup admin user"
status={hasAdminUser}
>
Store admin email/password
{' '}
in environment variables:
{renderEnvVars([
'ADMIN_EMAIL',
'ADMIN_PASSWORD',
])}
</ChecklistRow>
</Checklist>
<Checklist
title="Content"
icon={<BiPencil size={16} />}
>
<ChecklistRow
title="Add custom domain"
status={hasDomain}
>
Store in environment variable (displayed in top-right nav):
{renderEnvVars(['NEXT_PUBLIC_SITE_DOMAIN'])}
</ChecklistRow>
<ChecklistRow
title="Add title"
status={hasTitle}
optional
>
Store in environment variable (used in page titles):
{renderEnvVars(['NEXT_PUBLIC_SITE_TITLE'])}
</ChecklistRow>
<ChecklistRow
title="Add description"
status={hasDescription}
optional
>
Store in environment variable (mainly used for OG meta):
{renderEnvVars(['NEXT_PUBLIC_SITE_DESCRIPTION'])}
</ChecklistRow>
</Checklist>
{!simplifiedView && <>
<Checklist
title="AI Text Generation"
icon={<HiSparkles />}
experimental
optional
>
<ChecklistRow
title={isAiTextGenerationEnabled && isTestingConnections
? 'Testing OpenAI connection'
: 'Add OpenAI Secret Key'}
status={isAiTextGenerationEnabled}
isPending={isAiTextGenerationEnabled && isTestingConnections}
optional
>
{aiError &&
renderConnectionError('OpenAI', aiError)}
Store your OpenAI secret key in order to add experimental support
for AI-generated text descriptions and enable an invisible field
called {'"Semantic Description"'} used to support CMD-K search
{renderEnvVars(['OPENAI_SECRET_KEY'])}
</ChecklistRow>
<ChecklistRow
title={hasVercelKv && isTestingConnections
? 'Testing KV connection'
: 'Enable Rate Limiting'}
status={hasVercelKv}
isPending={hasVercelKv && isTestingConnections}
optional
>
{kvError &&
renderConnectionError('Vercel KV', kvError)}
{renderLink(
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
'https://vercel.com/docs/storage/vercel-kv/quickstart#create-a-kv-database', title={`Auto-generated fields: ${aiTextAutoGeneratedFields.join(', ')}`}
'Create Vercel KV store', status={hasAiTextAutoGeneratedFields}
)} optional
{' '} >
and connect to project in order to enable rate limiting Comma-separated fields to auto-generate when
</ChecklistRow> uploading photos. Accepted values: title, caption,
<ChecklistRow tags, description, all, or none (default is {'"all"'}).
// eslint-disable-next-line max-len {renderEnvVars(['AI_TEXT_AUTO_GENERATED_FIELDS'])}
title={`Auto-generated fields: ${aiTextAutoGeneratedFields.join(', ')}`} </ChecklistRow>
status={hasAiTextAutoGeneratedFields} </Checklist>
<Checklist
title="Settings"
icon={<BiCog size={16} />}
optional optional
> >
Comma-separated fields to auto-generate when <ChecklistRow
uploading photos. Accepted values: title, caption, title="Pro mode"
tags, description, all, or none (default is {'"all"'}). status={isProModeEnabled}
{renderEnvVars(['AI_TEXT_AUTO_GENERATED_FIELDS'])} optional
</ChecklistRow> >
</Checklist> Set environment variable to {'"1"'} to enable
<Checklist higher quality image storage:
title="Settings" {renderEnvVars(['NEXT_PUBLIC_PRO_MODE'])}
icon={<BiCog size={16} />} </ChecklistRow>
optional <ChecklistRow
> title="Static Optimization"
<ChecklistRow status={isStaticallyOptimized}
title="Pro mode" optional
status={isProModeEnabled} experimental
optional >
> Set environment variable to {'"1"'} to enable static optimization,
Set environment variable to {'"1"'} to enable i.e., rendering pages and images at build time:
higher quality image storage: {renderSubStatus(
{renderEnvVars(['NEXT_PUBLIC_PRO_MODE'])} arePagesStaticallyOptimized ? 'checked' : 'optional',
</ChecklistRow> renderEnvVars(['NEXT_PUBLIC_STATICALLY_OPTIMIZE_PAGES']),
<ChecklistRow 'translate-y-[3.5px]',
title="Static Optimization" )}
status={isStaticallyOptimized} {renderSubStatus(
optional areOGImagesStaticallyOptimized ? 'checked' : 'optional',
experimental renderEnvVars(['NEXT_PUBLIC_STATICALLY_OPTIMIZE_OG_IMAGES']),
> 'translate-y-[3.5px]',
Set environment variable to {'"1"'} to enable static optimization, )}
i.e., rendering pages and images at build time: </ChecklistRow>
{renderSubStatus( <ChecklistRow
arePagesStaticallyOptimized ? 'checked' : 'optional', title="Photo Matting"
renderEnvVars(['NEXT_PUBLIC_STATICALLY_OPTIMIZE_PAGES']), status={arePhotosMatted}
'translate-y-[3.5px]', optional
)} >
{renderSubStatus( Set environment variable to {'"1"'} to constrain the size
areOGImagesStaticallyOptimized ? 'checked' : 'optional', {' '}
renderEnvVars(['NEXT_PUBLIC_STATICALLY_OPTIMIZE_OG_IMAGES']), of each photo, and enable a surrounding border:
'translate-y-[3.5px]', {renderEnvVars(['NEXT_PUBLIC_MATTE_PHOTOS'])}
)} </ChecklistRow>
</ChecklistRow> <ChecklistRow
<ChecklistRow title="Image Blur"
title="Photo Matting" status={isBlurEnabled}
status={arePhotosMatted} optional
optional >
> Set environment variable to {'"1"'} to prevent
Set environment variable to {'"1"'} to constrain the size image blur data being stored and displayed
{' '} {renderEnvVars(['NEXT_PUBLIC_BLUR_DISABLED'])}
of each photo, and enable a surrounding border: </ChecklistRow>
{renderEnvVars(['NEXT_PUBLIC_MATTE_PHOTOS'])} <ChecklistRow
</ChecklistRow> title="Geo privacy"
<ChecklistRow status={isGeoPrivacyEnabled}
title="Image Blur" optional
status={isBlurEnabled} >
optional Set environment variable to {'"1"'} to disable
> collection/display of location-based data
Set environment variable to {'"1"'} to prevent {renderEnvVars(['NEXT_PUBLIC_GEO_PRIVACY'])}
image blur data being stored and displayed </ChecklistRow>
{renderEnvVars(['NEXT_PUBLIC_BLUR_DISABLED'])} <ChecklistRow
</ChecklistRow> title="Priority order"
<ChecklistRow status={isPriorityOrderEnabled}
title="Geo privacy" optional
status={isGeoPrivacyEnabled} >
optional Set environment variable to {'"1"'} to prevent
> priority order photo field affecting photo order
Set environment variable to {'"1"'} to disable {renderEnvVars(['NEXT_PUBLIC_IGNORE_PRIORITY_ORDER'])}
collection/display of location-based data </ChecklistRow>
{renderEnvVars(['NEXT_PUBLIC_GEO_PRIVACY'])} <ChecklistRow
</ChecklistRow> title="Public API"
<ChecklistRow status={isPublicApiEnabled}
title="Priority order" optional
status={isPriorityOrderEnabled} >
optional Set environment variable to {'"1"'} to enable
> a public API available at <code>/api</code>:
Set environment variable to {'"1"'} to prevent {renderEnvVars(['NEXT_PUBLIC_PUBLIC_API'])}
priority order photo field affecting photo order </ChecklistRow>
{renderEnvVars(['NEXT_PUBLIC_IGNORE_PRIORITY_ORDER'])} <ChecklistRow
</ChecklistRow> title="Show repo link"
<ChecklistRow status={showRepoLink}
title="Public API" optional
status={isPublicApiEnabled} >
optional Set environment variable to {'"1"'} to hide footer link:
> {renderEnvVars(['NEXT_PUBLIC_HIDE_REPO_LINK'])}
Set environment variable to {'"1"'} to enable </ChecklistRow>
a public API available at <code>/api</code>: <ChecklistRow
{renderEnvVars(['NEXT_PUBLIC_PUBLIC_API'])} title="Show social"
</ChecklistRow> status={showSocial}
<ChecklistRow optional
title="Show repo link" >
status={showRepoLink} Set environment variable to {'"1"'} to hide
optional {' '}
> X button from share modal:
Set environment variable to {'"1"'} to hide footer link: {renderEnvVars(['NEXT_PUBLIC_HIDE_SOCIAL'])}
{renderEnvVars(['NEXT_PUBLIC_HIDE_REPO_LINK'])} </ChecklistRow>
</ChecklistRow> <ChecklistRow
<ChecklistRow title="Show Fujifilm simulations"
title="Show social" status={showFilmSimulations}
status={showSocial} optional
optional >
> Set environment variable to {'"1"'} to prevent
Set environment variable to {'"1"'} to hide simulations showing up in /grid sidebar and
{' '} CMD-K search results:
X button from share modal: {renderEnvVars(['NEXT_PUBLIC_HIDE_FILM_SIMULATIONS'])}
{renderEnvVars(['NEXT_PUBLIC_HIDE_SOCIAL'])} </ChecklistRow>
</ChecklistRow> <ChecklistRow
<ChecklistRow title="Show EXIF data"
title="Show Fujifilm simulations" status={showExifInfo}
status={showFilmSimulations} optional
optional >
> Set environment variable to {'"1"'} to hide EXIF data:
Set environment variable to {'"1"'} to prevent {renderEnvVars(['NEXT_PUBLIC_HIDE_EXIF_DATA'])}
simulations showing up in /grid sidebar and </ChecklistRow>
CMD-K search results: <ChecklistRow
{renderEnvVars(['NEXT_PUBLIC_HIDE_FILM_SIMULATIONS'])} title={`Grid aspect ratio: ${gridAspectRatio}`}
</ChecklistRow> status={hasGridAspectRatio}
<ChecklistRow optional
title="Show EXIF data" >
status={showExifInfo} Set environment variable to any number to enforce aspect ratio
optional {' '}
> (default is {'"1"'}, i.e., square)set to {'"0"'} to disable:
Set environment variable to {'"1"'} to hide EXIF data: {renderEnvVars(['NEXT_PUBLIC_GRID_ASPECT_RATIO'])}
{renderEnvVars(['NEXT_PUBLIC_HIDE_EXIF_DATA'])} </ChecklistRow>
</ChecklistRow> <ChecklistRow
<ChecklistRow title="Legacy OG text alignment"
title={`Grid aspect ratio: ${gridAspectRatio}`} status={isOgTextBottomAligned}
status={hasGridAspectRatio} optional
optional >
> Set environment variable to {'"BOTTOM"'} to
Set environment variable to any number to enforce aspect ratio keep OG image text bottom aligned (default is {'"top"'}):
{' '} {renderEnvVars(['NEXT_PUBLIC_OG_TEXT_ALIGNMENT'])}
(default is {'"1"'}, i.e., square)set to {'"0"'} to disable: </ChecklistRow>
{renderEnvVars(['NEXT_PUBLIC_GRID_ASPECT_RATIO'])} </Checklist>
</ChecklistRow> </>}
<ChecklistRow </div>
title="Legacy OG text alignment" <div className="pl-11 pr-2 sm:pr-11 mt-4 sm:mt-7">
status={isOgTextBottomAligned}
optional
>
Set environment variable to {'"BOTTOM"'} to
keep OG image text bottom aligned (default is {'"top"'}):
{renderEnvVars(['NEXT_PUBLIC_OG_TEXT_ALIGNMENT'])}
</ChecklistRow>
</Checklist>
</>}
<div className="px-11 space-y-5 pt-0.5">
<div> <div>
Changes to environment variables require a redeploy Changes to environment variables require a redeploy
or reboot of local dev server or reboot of local dev server
</div> </div>
{!simplifiedView && {!simplifiedView &&
<div className="text-dim"> <div className="text-dim before:content-['—']">
<div>Base Url: {baseUrl || 'Not Defined'}</div> <div className="flex whitespace-nowrap">
<span className="font-bold">Base Url</span>
&nbsp;&nbsp;
<span className="w-full flex overflow-x-auto">
{baseUrl || 'Not Defined'}
</span>
</div>
<div> <div>
Commit:&nbsp;&nbsp; <span className="font-bold">Commit</span>
{' '} &nbsp;&nbsp;&nbsp;&nbsp;
{commitSha ? commitSha.slice(0, 7) : 'Not Found'} {commitSha || 'Not Found'}
</div> </div>
</div>} </div>}
</div> </div>

View File

@ -8,7 +8,7 @@ export default async function SiteChecklistServer({
}: { }: {
simplifiedView?: boolean simplifiedView?: boolean
}) { }) {
const secret = await generateAuthSecret(); const secret = await generateAuthSecret().catch(() => 'TRY AGAIN');
const connectionErrors = await testConnectionsAction().catch(() => ({})); const connectionErrors = await testConnectionsAction().catch(() => ({}));
return ( return (
<SiteChecklistClient {...{ <SiteChecklistClient {...{

View File

@ -207,7 +207,7 @@ export const CONFIG_CHECKLIST_STATUS = {
hasGridAspectRatio: Boolean(process.env.NEXT_PUBLIC_GRID_ASPECT_RATIO), hasGridAspectRatio: Boolean(process.env.NEXT_PUBLIC_GRID_ASPECT_RATIO),
baseUrl: BASE_URL, baseUrl: BASE_URL,
commitMessage: VERCEL_COMMIT_MESSAGE, commitMessage: VERCEL_COMMIT_MESSAGE,
commitSha: VERCEL_COMMIT_SHA, commitSha: VERCEL_COMMIT_SHA ? VERCEL_COMMIT_SHA.slice(0, 7) : undefined,
}; };
export type ConfigChecklistStatus = typeof CONFIG_CHECKLIST_STATUS; export type ConfigChecklistStatus = typeof CONFIG_CHECKLIST_STATUS;