diff --git a/apps/playground/.eslintrc.json b/apps/playground/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/apps/playground/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/apps/playground/.gitignore b/apps/playground/.gitignore new file mode 100644 index 000000000..fd3dbb571 --- /dev/null +++ b/apps/playground/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/playground/README.md b/apps/playground/README.md new file mode 100644 index 000000000..c4033664f --- /dev/null +++ b/apps/playground/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/apps/playground/next.config.mjs b/apps/playground/next.config.mjs new file mode 100644 index 000000000..4678774e6 --- /dev/null +++ b/apps/playground/next.config.mjs @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +export default nextConfig; diff --git a/apps/playground/package.json b/apps/playground/package.json new file mode 100644 index 000000000..ffb37657d --- /dev/null +++ b/apps/playground/package.json @@ -0,0 +1,28 @@ +{ + "name": "playground", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "lint:fix": "next lint --fix" + }, + "dependencies": { + "next": "14.2.5", + "react": "^18", + "react-dom": "^18", + "zustand": "~4.5.4" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "14.2.5", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5" + } +} diff --git a/apps/playground/postcss.config.mjs b/apps/playground/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/apps/playground/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/apps/playground/public/next.svg b/apps/playground/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/apps/playground/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/playground/public/vercel.svg b/apps/playground/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/apps/playground/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/playground/src/app/favicon.ico b/apps/playground/src/app/favicon.ico new file mode 100644 index 000000000..09b3f98a6 Binary files /dev/null and b/apps/playground/src/app/favicon.ico differ diff --git a/apps/playground/src/app/globals.css b/apps/playground/src/app/globals.css new file mode 100644 index 000000000..b5c61c956 --- /dev/null +++ b/apps/playground/src/app/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/apps/playground/src/app/layout.tsx b/apps/playground/src/app/layout.tsx new file mode 100644 index 000000000..2386769a6 --- /dev/null +++ b/apps/playground/src/app/layout.tsx @@ -0,0 +1,23 @@ +import { type Metadata } from 'next'; +import { Inter } from 'next/font/google'; + +import './globals.css'; + +const inter = Inter({ subsets: ['latin'] }); + +export const metadata: Metadata = { + title: 'GEL Playground', + description: 'GEl Playground', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + {children} + + ); +} diff --git a/apps/playground/src/app/page.tsx b/apps/playground/src/app/page.tsx new file mode 100644 index 000000000..49cb04870 --- /dev/null +++ b/apps/playground/src/app/page.tsx @@ -0,0 +1,29 @@ +'use client'; + +import { Card } from '@/components/card/card.component'; +import { useThemeStore } from '@/theme/theme.store'; +import { BrandKey } from '@/theme/theme.types'; + +export default function Home() { + const { activeThemeKey, setTheme } = useThemeStore(); + return ( +
+ +
+ ); +} diff --git a/apps/playground/src/components/card/card.component.tsx b/apps/playground/src/components/card/card.component.tsx new file mode 100644 index 000000000..ee37e058d --- /dev/null +++ b/apps/playground/src/components/card/card.component.tsx @@ -0,0 +1,28 @@ +'use client'; + +import { useThemeStore } from '@/theme/theme.store'; +import { BrandKey } from '@/theme/theme.types'; + +export function Card({ active, brand = 'wbc' }: { active?: boolean; brand?: BrandKey }) { + const { themes, activeTheme, activeThemeKey, brandName } = useThemeStore(); + return ( +
  • +
    +
    +

    + {active ? `Active brand: ${brandName[activeThemeKey]}` : brandName[brand]} +

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore + magna aliqua. +

    +
    +
  • + ); +} diff --git a/apps/playground/src/theme/theme.store.ts b/apps/playground/src/theme/theme.store.ts new file mode 100644 index 000000000..40c3a9881 --- /dev/null +++ b/apps/playground/src/theme/theme.store.ts @@ -0,0 +1,30 @@ +import { create } from 'zustand'; + +import { BrandKey, Theme } from './theme.types'; +import { BOMTheme, BSATheme, STGTheme, WBCTheme } from './themes'; + +type ThemeState = { + activeTheme: Theme; + activeThemeKey: BrandKey; + brandName: Record; + setTheme: (theme: BrandKey) => void; + themes: Record; +}; + +export const useThemeStore = create()(set => ({ + activeTheme: WBCTheme, + activeThemeKey: 'wbc', + brandName: { + wbc: 'Westpac', + stg: 'St. George', + bom: 'Bank of Melbourne', + bsa: 'BankSA', + }, + setTheme: theme => set(state => ({ activeThemeKey: theme, activeTheme: state.themes[theme] })), + themes: { + wbc: WBCTheme, + bom: BOMTheme, + bsa: BSATheme, + stg: STGTheme, + }, +})); diff --git a/apps/playground/src/theme/theme.types.ts b/apps/playground/src/theme/theme.types.ts new file mode 100644 index 000000000..2f14f219e --- /dev/null +++ b/apps/playground/src/theme/theme.types.ts @@ -0,0 +1,5 @@ +export type BrandKey = 'bom' | 'bsa' | 'stg' | 'wbc'; + +export type ColorKey = 'primary' | 'hero' | 'text' | 'border'; + +export type Theme = Record; diff --git a/apps/playground/src/theme/themes.ts b/apps/playground/src/theme/themes.ts new file mode 100644 index 000000000..b7d965de6 --- /dev/null +++ b/apps/playground/src/theme/themes.ts @@ -0,0 +1,29 @@ +import { Theme } from './theme.types'; + +export const WBCTheme: Theme = { + primary: '#DA1710', + hero: '#1F1C4F', + text: '#181B25', + border: '#DEDEE1', +}; + +export const STGTheme: Theme = { + primary: '#E30000', + hero: '#008739', + text: '#004833', + border: '#D6D5D0', +}; + +export const BOMTheme: Theme = { + primary: '#D13900', + hero: '#534891', + text: '#20024E', + border: '#D4D4D8', +}; + +export const BSATheme: Theme = { + primary: '#D81B2B', + hero: '#002F6C', + text: '#333', + border: '#D3D4D5', +}; diff --git a/apps/playground/tailwind.config.ts b/apps/playground/tailwind.config.ts new file mode 100644 index 000000000..7747eda6a --- /dev/null +++ b/apps/playground/tailwind.config.ts @@ -0,0 +1,19 @@ +import type { Config } from 'tailwindcss'; + +const config: Config = { + content: [ + './src/pages/**/*.{js,ts,jsx,tsx,mdx}', + './src/components/**/*.{js,ts,jsx,tsx,mdx}', + './src/app/**/*.{js,ts,jsx,tsx,mdx}', + ], + theme: { + extend: { + backgroundImage: { + 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', + 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', + }, + }, + }, + plugins: [], +}; +export default config; diff --git a/apps/playground/tsconfig.json b/apps/playground/tsconfig.json new file mode 100644 index 000000000..7b2858930 --- /dev/null +++ b/apps/playground/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be2f1a6b2..df757f3d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,6 +39,46 @@ importers: specifier: ^1.9.0 version: 1.9.0 + apps/playground: + dependencies: + next: + specifier: 14.2.5 + version: 14.2.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: + specifier: ^18 + version: 18.2.0 + react-dom: + specifier: ^18 + version: 18.2.0(react@18.2.0) + zustand: + specifier: ~4.5.4 + version: 4.5.4(@types/react@18.2.28)(immer@9.0.21)(react@18.2.0) + devDependencies: + '@types/node': + specifier: ^20 + version: 20.12.14 + '@types/react': + specifier: ^18 + version: 18.2.28 + '@types/react-dom': + specifier: ^18 + version: 18.2.1 + eslint: + specifier: ^8 + version: 8.57.0 + eslint-config-next: + specifier: 14.2.5 + version: 14.2.5(eslint@8.57.0)(typescript@5.1.6) + postcss: + specifier: ^8 + version: 8.4.39 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.4(ts-node@10.9.2(@types/node@20.12.14)(typescript@5.1.6)) + typescript: + specifier: ^5 + version: 5.1.6 + apps/protoform: dependencies: '@westpac/ui': @@ -1860,63 +1900,123 @@ packages: '@next/env@14.2.4': resolution: {integrity: sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==} + '@next/env@14.2.5': + resolution: {integrity: sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==} + '@next/eslint-plugin-next@14.2.4': resolution: {integrity: sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==} + '@next/eslint-plugin-next@14.2.5': + resolution: {integrity: sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==} + '@next/swc-darwin-arm64@14.2.4': resolution: {integrity: sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@14.2.5': + resolution: {integrity: sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-x64@14.2.4': resolution: {integrity: sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@14.2.5': + resolution: {integrity: sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-linux-arm64-gnu@14.2.4': resolution: {integrity: sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-gnu@14.2.5': + resolution: {integrity: sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-arm64-musl@14.2.4': resolution: {integrity: sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-musl@14.2.5': + resolution: {integrity: sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-x64-gnu@14.2.4': resolution: {integrity: sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-gnu@14.2.5': + resolution: {integrity: sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-linux-x64-musl@14.2.4': resolution: {integrity: sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-musl@14.2.5': + resolution: {integrity: sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-win32-arm64-msvc@14.2.4': resolution: {integrity: sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@14.2.5': + resolution: {integrity: sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-ia32-msvc@14.2.4': resolution: {integrity: sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] + '@next/swc-win32-ia32-msvc@14.2.5': + resolution: {integrity: sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + '@next/swc-win32-x64-msvc@14.2.4': resolution: {integrity: sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@14.2.5': + resolution: {integrity: sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -5559,6 +5659,15 @@ packages: typescript: optional: true + eslint-config-next@14.2.5: + resolution: {integrity: sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + eslint-config-prettier@8.6.0: resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true @@ -7413,6 +7522,24 @@ packages: sass: optional: true + next@14.2.5: + resolution: {integrity: sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -7912,14 +8039,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.39: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} @@ -9373,6 +9492,11 @@ packages: '@types/react': optional: true + use-sync-external-store@1.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.2.2: resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: @@ -9788,6 +9912,21 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + zustand@4.5.4: + resolution: {integrity: sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -11615,37 +11754,70 @@ snapshots: '@next/env@14.2.4': {} + '@next/env@14.2.5': {} + '@next/eslint-plugin-next@14.2.4': dependencies: glob: 10.3.10 + '@next/eslint-plugin-next@14.2.5': + dependencies: + glob: 10.3.10 + '@next/swc-darwin-arm64@14.2.4': optional: true + '@next/swc-darwin-arm64@14.2.5': + optional: true + '@next/swc-darwin-x64@14.2.4': optional: true + '@next/swc-darwin-x64@14.2.5': + optional: true + '@next/swc-linux-arm64-gnu@14.2.4': optional: true + '@next/swc-linux-arm64-gnu@14.2.5': + optional: true + '@next/swc-linux-arm64-musl@14.2.4': optional: true + '@next/swc-linux-arm64-musl@14.2.5': + optional: true + '@next/swc-linux-x64-gnu@14.2.4': optional: true + '@next/swc-linux-x64-gnu@14.2.5': + optional: true + '@next/swc-linux-x64-musl@14.2.4': optional: true + '@next/swc-linux-x64-musl@14.2.5': + optional: true + '@next/swc-win32-arm64-msvc@14.2.4': optional: true + '@next/swc-win32-arm64-msvc@14.2.5': + optional: true + '@next/swc-win32-ia32-msvc@14.2.4': optional: true + '@next/swc-win32-ia32-msvc@14.2.5': + optional: true + '@next/swc-win32-x64-msvc@14.2.4': optional: true + '@next/swc-win32-x64-msvc@14.2.5': + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -15178,7 +15350,7 @@ snapshots: '@types/pg@8.11.6': dependencies: - '@types/node': 17.0.12 + '@types/node': 20.12.14 pg-protocol: 1.6.1 pg-types: 4.0.2 @@ -15326,7 +15498,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 5.51.0(typescript@5.1.6) '@typescript-eslint/utils': 5.51.0(eslint@8.57.0)(typescript@5.1.6) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 tsutils: 3.21.0(typescript@5.1.6) optionalDependencies: @@ -15344,10 +15516,10 @@ snapshots: dependencies: '@typescript-eslint/types': 5.51.0 '@typescript-eslint/visitor-keys': 5.51.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.2 tsutils: 3.21.0(typescript@5.1.6) optionalDependencies: typescript: 5.1.6 @@ -16435,12 +16607,12 @@ snapshots: css-loader@6.10.0(webpack@5.92.1(@swc/core@1.3.35)(esbuild@0.18.20)): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.39) + postcss-modules-local-by-default: 4.0.4(postcss@8.4.39) + postcss-modules-scope: 3.1.1(postcss@8.4.39) + postcss-modules-values: 4.0.0(postcss@8.4.39) postcss-value-parser: 4.2.0 semver: 7.6.0 optionalDependencies: @@ -16985,6 +17157,24 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-config-next@14.2.5(eslint@8.57.0)(typescript@5.1.6): + dependencies: + '@next/eslint-plugin-next': 14.2.5 + '@rushstack/eslint-patch': 1.10.3 + '@typescript-eslint/parser': 5.51.0(eslint@8.57.0)(typescript@5.1.6) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(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.2.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + optionalDependencies: + typescript: 5.1.6 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + eslint-config-prettier@8.6.0(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -17027,6 +17217,23 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + dependencies: + debug: 4.3.5 + enhanced-resolve: 5.17.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(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.2.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.5 + is-core-module: 2.14.0 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.5 @@ -17055,6 +17262,17 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.8.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.51.0(eslint@8.57.0)(typescript@5.1.6) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.51.0(eslint@8.57.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.1.6))(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.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 @@ -17796,7 +18014,7 @@ snapshots: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.5 minipass: 7.0.4 path-scurry: 1.10.1 @@ -17975,7 +18193,7 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -17994,7 +18212,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -18014,9 +18232,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.35): + icss-utils@5.1.0(postcss@8.4.39): dependencies: - postcss: 8.4.35 + postcss: 8.4.39 idb-keyval@6.2.1: {} @@ -18718,7 +18936,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.2 make-error@1.3.6: {} @@ -19338,6 +19556,31 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@14.2.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@next/env': 14.2.5 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001640 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.0.0)(react@18.2.0) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.5 + '@next/swc-darwin-x64': 14.2.5 + '@next/swc-linux-arm64-gnu': 14.2.5 + '@next/swc-linux-arm64-musl': 14.2.5 + '@next/swc-linux-x64-gnu': 14.2.5 + '@next/swc-linux-x64-musl': 14.2.5 + '@next/swc-win32-arm64-msvc': 14.2.5 + '@next/swc-win32-ia32-msvc': 14.2.5 + '@next/swc-win32-x64-msvc': 14.2.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -19780,13 +20023,6 @@ snapshots: transitivePeerDependencies: - ts-node - postcss-import@15.1.0(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - postcss-import@15.1.0(postcss@8.4.39): dependencies: postcss: 8.4.39 @@ -19794,11 +20030,6 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.31): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.31 - postcss-js@4.0.1(postcss@8.4.39): dependencies: camelcase-css: 2.0.1 @@ -19812,20 +20043,28 @@ snapshots: postcss: 8.4.31 ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@20.12.12)(typescript@5.1.6) - postcss-load-config@4.0.2(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.3.35)(@types/node@17.0.12)(typescript@5.1.6)): + postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.1(@swc/core@1.3.35)(@types/node@20.12.12)(typescript@5.1.6)): dependencies: lilconfig: 3.1.1 yaml: 2.3.4 optionalDependencies: - postcss: 8.4.31 + postcss: 8.4.39 + ts-node: 10.9.1(@swc/core@1.3.35)(@types/node@20.12.12)(typescript@5.1.6) + + postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2(@swc/core@1.3.35)(@types/node@17.0.12)(typescript@5.1.6)): + dependencies: + lilconfig: 3.1.1 + yaml: 2.3.4 + optionalDependencies: + postcss: 8.4.39 ts-node: 10.9.2(@swc/core@1.3.35)(@types/node@17.0.12)(typescript@5.1.6) - postcss-load-config@4.0.2(postcss@8.4.31)(ts-node@10.9.2(@types/node@20.0.0)(typescript@5.1.6)): + postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.0.0)(typescript@5.1.6)): dependencies: lilconfig: 3.1.1 yaml: 2.3.4 optionalDependencies: - postcss: 8.4.31 + postcss: 8.4.39 ts-node: 10.9.2(@types/node@20.0.0)(typescript@5.1.6) postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.12.14)(typescript@5.1.6)): @@ -19839,47 +20078,42 @@ snapshots: postcss-loader@7.3.4(postcss@8.4.31)(typescript@5.1.6)(webpack@5.92.1(@swc/core@1.3.35)(esbuild@0.18.20)): dependencies: cosmiconfig: 8.3.6(typescript@5.1.6) - jiti: 1.21.0 + jiti: 1.21.6 postcss: 8.4.31 semver: 7.6.0 webpack: 5.92.1(@swc/core@1.3.35)(esbuild@0.18.20) transitivePeerDependencies: - typescript - postcss-modules-extract-imports@3.0.0(postcss@8.4.35): + postcss-modules-extract-imports@3.0.0(postcss@8.4.39): dependencies: - postcss: 8.4.35 + postcss: 8.4.39 - postcss-modules-local-by-default@4.0.4(postcss@8.4.35): + postcss-modules-local-by-default@4.0.4(postcss@8.4.39): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.1.1(postcss@8.4.35): + postcss-modules-scope@3.1.1(postcss@8.4.39): dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 - - postcss-modules-values@4.0.0(postcss@8.4.35): - dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + postcss: 8.4.39 + postcss-selector-parser: 6.1.0 - postcss-nested@6.0.1(postcss@8.4.31): + postcss-modules-values@4.0.0(postcss@8.4.39): dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.15 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 postcss-nested@6.0.1(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.1.0 postcss-reporter@7.1.0(postcss@8.4.31): dependencies: - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.31 thenby: 1.3.4 @@ -19901,18 +20135,6 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.0.2 - postcss@8.4.35: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - postcss@8.4.38: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - postcss@8.4.39: dependencies: nanoid: 3.3.7 @@ -20517,12 +20739,12 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.31 + postcss: 8.4.39 source-map: 0.6.1 resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -21051,7 +21273,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -21122,11 +21344,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.1(@swc/core@1.3.35)(@types/node@20.12.12)(typescript@5.1.6)) - postcss-nested: 6.0.1(postcss@8.4.31) + postcss: 8.4.39 + postcss-import: 15.1.0(postcss@8.4.39) + postcss-js: 4.0.1(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.1(@swc/core@1.3.35)(@types/node@20.12.12)(typescript@5.1.6)) + postcss-nested: 6.0.1(postcss@8.4.39) postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 resolve: 1.22.8 @@ -21150,11 +21372,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(@swc/core@1.3.35)(@types/node@17.0.12)(typescript@5.1.6)) - postcss-nested: 6.0.1(postcss@8.4.31) + postcss: 8.4.39 + postcss-import: 15.1.0(postcss@8.4.39) + postcss-js: 4.0.1(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@swc/core@1.3.35)(@types/node@17.0.12)(typescript@5.1.6)) + postcss-nested: 6.0.1(postcss@8.4.39) postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 resolve: 1.22.8 @@ -21178,11 +21400,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.2(postcss@8.4.31)(ts-node@10.9.2(@types/node@20.0.0)(typescript@5.1.6)) - postcss-nested: 6.0.1(postcss@8.4.31) + postcss: 8.4.39 + postcss-import: 15.1.0(postcss@8.4.39) + postcss-js: 4.0.1(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.0.0)(typescript@5.1.6)) + postcss-nested: 6.0.1(postcss@8.4.39) postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 resolve: 1.22.8 @@ -21690,7 +21912,7 @@ snapshots: unplugin@1.7.1: dependencies: acorn: 8.12.1 - chokidar: 3.5.3 + chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 @@ -21700,7 +21922,7 @@ snapshots: dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 update-browserslist-db@1.1.0(browserslist@4.23.1): dependencies: @@ -21756,6 +21978,10 @@ snapshots: optionalDependencies: '@types/react': 18.2.28 + use-sync-external-store@1.2.0(react@18.2.0): + dependencies: + react: 18.2.0 + use-sync-external-store@1.2.2(react@18.2.0): dependencies: react: 18.2.0 @@ -21808,10 +22034,10 @@ snapshots: vite-node@0.30.1(@types/node@20.12.14)(less@4.2.0)(terser@5.31.1): dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.5 mlly: 1.6.0 pathe: 1.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 vite: 4.5.3(@types/node@20.12.14)(less@4.2.0)(terser@5.31.1) transitivePeerDependencies: - '@types/node' @@ -21837,7 +22063,7 @@ snapshots: vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(terser@5.31.1): dependencies: esbuild: 0.20.2 - postcss: 8.4.38 + postcss: 8.4.39 rollup: 4.18.0 optionalDependencies: '@types/node': 20.12.12 @@ -22181,4 +22407,12 @@ snapshots: yocto-queue@1.0.0: {} + zustand@4.5.4(@types/react@18.2.28)(immer@9.0.21)(react@18.2.0): + dependencies: + use-sync-external-store: 1.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.28 + immer: 9.0.21 + react: 18.2.0 + zwitch@2.0.4: {}