diff --git a/.config/manifest.cjs b/.config/manifest.cjs index 84fbdd6..e423288 100644 --- a/.config/manifest.cjs +++ b/.config/manifest.cjs @@ -53,8 +53,7 @@ module.exports.FIELD_TSCMONO_CONFIG_MAP = { 'apps/docs': 'docusaurus', 'apps/droprate': 'viteApp', 'apps/team-rotation': 'viteApp', - 'apps/isspacemarine2outyet': 'nextApp', - 'apps/isdarktideoutyet': 'nextApp', + 'apps/timer40k': 'nextApp', }; module.exports.REQUIRED_WORKSPACE_IGNORE_LIST = new Set([ 'root', @@ -70,4 +69,4 @@ module.exports.REQUIRED_WORKSPACE_DEPENDENCIES = { module.exports.MODULE_DEPENDENCY_ENFORCEMENT_FIELD_LIST = [ 'peerDependencies', 'optionalDependencies', -] +] \ No newline at end of file diff --git a/.tscmonorc.yml b/.tscmonorc.yml index c2ed1af..12907fa 100644 --- a/.tscmonorc.yml +++ b/.tscmonorc.yml @@ -36,6 +36,7 @@ presets: - "src/**/__fixtures__/**/*" - "src/**/__mocks__/**/*" nextApp: + extends: "./tsconfig.next.json" compilerOptions: lib: - dom @@ -86,4 +87,4 @@ presets: strict: true noUnusedLocals: true noUnusedParameters: true - noFallthroughCasesInSwitch: true + noFallthroughCasesInSwitch: true \ No newline at end of file diff --git a/apps/isdarktideoutyet/app/Display.tsx b/apps/isdarktideoutyet/app/Display.tsx deleted file mode 100644 index f8b9d93..0000000 --- a/apps/isdarktideoutyet/app/Display.tsx +++ /dev/null @@ -1,46 +0,0 @@ -'use client'; - -import Image from 'next/image'; -import { - useState, - useEffect, -} from 'react'; -import dayjs from 'dayjs'; - -export type DisplayProperties = { - yes: string, - no: string, - releaseDate: string, -}; -export function Display({ - yes, - no, - releaseDate, -}: DisplayProperties) { - const [ - time, - setTime, - ] = useState(Date.now()); - useEffect( - () => { - const interval = setInterval( - () => setTime(Date.now()), - 100, - ); - return () => { clearInterval(interval); }; - }, - [], - ); - const diff = dayjs(time).diff(dayjs(releaseDate), 'day'); - const toRender = diff >= 0 ? yes : no; - return ( - <> -
- status-bg -
-
- status -
- - ); -} diff --git a/apps/isdarktideoutyet/app/page.tsx b/apps/isdarktideoutyet/app/page.tsx deleted file mode 100644 index 971521f..0000000 --- a/apps/isdarktideoutyet/app/page.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import no from './assets/e93.jpg'; -import yes from './assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg'; -import { Display } from './Display'; - -export default function Home() { - return ( - - ); -} diff --git a/apps/isspacemarine2outyet/.gitignore b/apps/isspacemarine2outyet/.gitignore deleted file mode 100644 index fd3dbb5..0000000 --- a/apps/isspacemarine2outyet/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# 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/isspacemarine2outyet/README.md b/apps/isspacemarine2outyet/README.md deleted file mode 100644 index c403366..0000000 --- a/apps/isspacemarine2outyet/README.md +++ /dev/null @@ -1,36 +0,0 @@ -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/isspacemarine2outyet/app/assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg b/apps/isspacemarine2outyet/app/assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg deleted file mode 100644 index 8f847d3..0000000 Binary files a/apps/isspacemarine2outyet/app/assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg and /dev/null differ diff --git a/apps/isspacemarine2outyet/app/assets/e93.jpg b/apps/isspacemarine2outyet/app/assets/e93.jpg deleted file mode 100644 index 2ddb590..0000000 Binary files a/apps/isspacemarine2outyet/app/assets/e93.jpg and /dev/null differ diff --git a/apps/isspacemarine2outyet/app/assets/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png b/apps/isspacemarine2outyet/app/assets/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png deleted file mode 100644 index 157b8c9..0000000 Binary files a/apps/isspacemarine2outyet/app/assets/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png and /dev/null differ diff --git a/apps/isspacemarine2outyet/app/favicon.ico b/apps/isspacemarine2outyet/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/apps/isspacemarine2outyet/app/favicon.ico and /dev/null differ diff --git a/apps/isspacemarine2outyet/app/globals.css b/apps/isspacemarine2outyet/app/globals.css deleted file mode 100644 index f4bd77c..0000000 --- a/apps/isspacemarine2outyet/app/globals.css +++ /dev/null @@ -1,107 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", - "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", - "Fira Mono", "Droid Sans Mono", "Courier New", monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/apps/isspacemarine2outyet/app/index.css b/apps/isspacemarine2outyet/app/index.css deleted file mode 100644 index c06f427..0000000 --- a/apps/isspacemarine2outyet/app/index.css +++ /dev/null @@ -1,58 +0,0 @@ -html, body, #root { - height: 100vh; - width: 100vw; - margin: 0; - overflow: hidden; - position: relative; - background: black; -} - -@keyframes blink { - 0% { - opacity: 1; - } - 50% { - opacity: 0.5; - } - 100% { - opacity: 1; - } -} - -.background, -.background img, -.background::after { - position: absolute; - width: 100%; - height: 100%; -} - -.background { - background-position: center center; - background-size: cover; -} - -.background img { - object-fit: cover; - filter: blur(20px); - animation: blink infinite ease-in-out 5s; -} - -.background::after { - content: ""; - background: radial-gradient(circle at center, black 0, black 300px, rgb(0 0 0 / 20%) 100%); -} - -.foreground { - position: relative; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; -} - -.foreground img { - box-shadow: 0px 0px 11px 0px black; - border-radius: 5px; -} diff --git a/apps/isspacemarine2outyet/app/layout.tsx b/apps/isspacemarine2outyet/app/layout.tsx deleted file mode 100644 index cbfcbca..0000000 --- a/apps/isspacemarine2outyet/app/layout.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import type { ReactNode } from 'react'; -import type { Metadata } from 'next'; -import { Inter } from 'next/font/google'; -import './index.css'; -import './globals.css'; - -const inter = Inter({ subsets: ['latin'] }); - -export const metadata: Metadata = { - title: 'Is Darktide out yet?', - description: 'Timer until Darktide is out', -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: ReactNode; -}>) { - return ( - - {children} - - ); -} diff --git a/apps/isspacemarine2outyet/app/page.tsx b/apps/isspacemarine2outyet/app/page.tsx deleted file mode 100644 index 9d75641..0000000 --- a/apps/isspacemarine2outyet/app/page.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import no from './assets/e93.jpg'; -import yes from './assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg'; -import { Display } from './Display'; - -export default function Home() { - return ( - - ); -} diff --git a/apps/isspacemarine2outyet/moon.yml b/apps/isspacemarine2outyet/moon.yml deleted file mode 100644 index df8fa34..0000000 --- a/apps/isspacemarine2outyet/moon.yml +++ /dev/null @@ -1,26 +0,0 @@ -project: - name: isspacemarine2outyet - description: Timer App for Space Marine 2 - channel: "#isspacemarine2outyet" - maintainers: - - Sabin Marcu - owner: Sabin Marcu -language: typescript -type: application - -tasks: - start: - command: "yarn dev" - options: - cache: false - build: - command: "yarn build" - options: - cache: false - runInCI: false - deps: - - "^:build" - -workspace: - inheritedTasks: - include: [] diff --git a/apps/isspacemarine2outyet/next.config.mjs b/apps/isspacemarine2outyet/next.config.mjs deleted file mode 100644 index 4678774..0000000 --- a/apps/isspacemarine2outyet/next.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {}; - -export default nextConfig; diff --git a/apps/isspacemarine2outyet/package.json b/apps/isspacemarine2outyet/package.json deleted file mode 100644 index 90bd488..0000000 --- a/apps/isspacemarine2outyet/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@sabinmarcu/isspacemarine2outyet", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "dayjs": "^1.11.12", - "next": "14.2.5", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@sabinmarcu/types": "workspace:*", - "@sabinmarcu/utils-test": "workspace:*", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.5", - "typescript": "^5" - }, - "tscmono": { - "preset": "nextApp" - }, - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": "./dist/index.js", - "default": "./dist/index.js", - "types": "./dist/index.d.ts" - }, - "./src/*": { - "import": "./src/*", - "default": "./src/*" - }, - "./*": { - "import": "./dist/*.js", - "default": "./dist/*.js", - "types": "./dist/*.d.ts" - }, - "./package.json": "./package.json" - }, - "typeVersions": { - "*": { - "*": [ - "./dist/*" - ] - } - }, - "type": "module" -} diff --git a/apps/isspacemarine2outyet/public/next.svg b/apps/isspacemarine2outyet/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/apps/isspacemarine2outyet/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/isspacemarine2outyet/public/vercel.svg b/apps/isspacemarine2outyet/public/vercel.svg deleted file mode 100644 index d2f8422..0000000 --- a/apps/isspacemarine2outyet/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/isdarktideoutyet/.gitignore b/apps/timer40k/.gitignore similarity index 95% rename from apps/isdarktideoutyet/.gitignore rename to apps/timer40k/.gitignore index fd3dbb5..dfd829f 100644 --- a/apps/isdarktideoutyet/.gitignore +++ b/apps/timer40k/.gitignore @@ -34,3 +34,5 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +!tsconfig.next.json \ No newline at end of file diff --git a/apps/isdarktideoutyet/README.md b/apps/timer40k/README.md similarity index 100% rename from apps/isdarktideoutyet/README.md rename to apps/timer40k/README.md diff --git a/apps/isspacemarine2outyet/app/Display.tsx b/apps/timer40k/app/Display.tsx similarity index 69% rename from apps/isspacemarine2outyet/app/Display.tsx rename to apps/timer40k/app/Display.tsx index 60f71a7..2575466 100644 --- a/apps/isspacemarine2outyet/app/Display.tsx +++ b/apps/timer40k/app/Display.tsx @@ -1,15 +1,16 @@ 'use client'; -import Image from 'next/image'; +import Image from 'next/image.js'; import { useState, useEffect, + type ComponentProps, } from 'react'; import dayjs from 'dayjs'; export type DisplayProperties = { - yes: string, - no: string, + yes: Partial>, + no: Partial>, releaseDate: string, }; export function Display({ @@ -32,15 +33,15 @@ export function Display({ [], ); const diff = dayjs(time).diff(dayjs(releaseDate), 'day', true); - const toRender = diff >= 0 ? yes : no; + const toRender = (diff >= 0 ? yes : no) as any; return ( <>
- status-bg + status-bg
- status + status
); -} +} \ No newline at end of file diff --git a/apps/timer40k/app/env.ts b/apps/timer40k/app/env.ts new file mode 100644 index 0000000..48a0d30 --- /dev/null +++ b/apps/timer40k/app/env.ts @@ -0,0 +1,10 @@ +import { z } from 'zod'; + +const envSchema = z.object({ + TIMER_40K_RELEASE_DATE: z.string(), +}); + +export type EnvType = z.infer; +export const env = envSchema.parse({ + TIMER_40K_RELEASE_DATE: process.env.TIMER_40K_RELEASE_DATE, +}); \ No newline at end of file diff --git a/apps/isdarktideoutyet/app/favicon.ico b/apps/timer40k/app/favicon.ico similarity index 100% rename from apps/isdarktideoutyet/app/favicon.ico rename to apps/timer40k/app/favicon.ico diff --git a/apps/isdarktideoutyet/app/globals.css b/apps/timer40k/app/globals.css similarity index 100% rename from apps/isdarktideoutyet/app/globals.css rename to apps/timer40k/app/globals.css diff --git a/apps/isdarktideoutyet/app/index.css b/apps/timer40k/app/index.css similarity index 100% rename from apps/isdarktideoutyet/app/index.css rename to apps/timer40k/app/index.css diff --git a/apps/isdarktideoutyet/app/layout.tsx b/apps/timer40k/app/layout.tsx similarity index 100% rename from apps/isdarktideoutyet/app/layout.tsx rename to apps/timer40k/app/layout.tsx diff --git a/apps/timer40k/app/page.tsx b/apps/timer40k/app/page.tsx new file mode 100644 index 0000000..0a14b93 --- /dev/null +++ b/apps/timer40k/app/page.tsx @@ -0,0 +1,22 @@ +import { Display } from './Display'; + +import { env as environment } from './env'; + +export default function Home() { + return ( + + ); +} \ No newline at end of file diff --git a/apps/isdarktideoutyet/moon.yml b/apps/timer40k/moon.yml similarity index 74% rename from apps/isdarktideoutyet/moon.yml rename to apps/timer40k/moon.yml index 019e47b..0ff525a 100644 --- a/apps/isdarktideoutyet/moon.yml +++ b/apps/timer40k/moon.yml @@ -1,7 +1,7 @@ project: - name: isdarktideoutyet - description: Timer App for Darktide - channel: "#isdarktideoutyet" + name: 40ktimer + description: Timer App for 40K Games + channel: "#40ktimer" maintainers: - Sabin Marcu owner: Sabin Marcu @@ -23,4 +23,4 @@ tasks: workspace: inheritedTasks: - include: [] + include: [] \ No newline at end of file diff --git a/apps/isdarktideoutyet/next.config.mjs b/apps/timer40k/next.config.mjs similarity index 100% rename from apps/isdarktideoutyet/next.config.mjs rename to apps/timer40k/next.config.mjs diff --git a/apps/isdarktideoutyet/package.json b/apps/timer40k/package.json similarity index 93% rename from apps/isdarktideoutyet/package.json rename to apps/timer40k/package.json index 17dc8b0..3628512 100644 --- a/apps/isdarktideoutyet/package.json +++ b/apps/timer40k/package.json @@ -1,5 +1,5 @@ { - "name": "@sabinmarcu/isdarktideoutyet", + "name": "@sabinmarcu/timer40k", "version": "0.1.0", "private": true, "scripts": { @@ -12,7 +12,8 @@ "dayjs": "^1.11.12", "next": "14.2.5", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "zod": "^3.23.8" }, "devDependencies": { "@sabinmarcu/types": "workspace:*", diff --git a/apps/isdarktideoutyet/app/assets/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png b/apps/timer40k/public/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png similarity index 100% rename from apps/isdarktideoutyet/app/assets/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png rename to apps/timer40k/public/imperial-aquila-logo-0AA55FB4E4-seeklogo.com.png diff --git a/apps/isdarktideoutyet/app/assets/e93.jpg b/apps/timer40k/public/no.jpg similarity index 100% rename from apps/isdarktideoutyet/app/assets/e93.jpg rename to apps/timer40k/public/no.jpg diff --git a/apps/isdarktideoutyet/app/assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg b/apps/timer40k/public/yes.jpg similarity index 100% rename from apps/isdarktideoutyet/app/assets/deirgr1-94e2bb3c-797c-423f-81b1-12c206c2cee9.jpg rename to apps/timer40k/public/yes.jpg diff --git a/apps/timer40k/tsconfig.next.json b/apps/timer40k/tsconfig.next.json new file mode 100644 index 0000000..7f162b7 --- /dev/null +++ b/apps/timer40k/tsconfig.next.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "moduleResolution": "Bundler" + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 841cbca..7d6f72c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6075,44 +6075,6 @@ __metadata: languageName: unknown linkType: soft -"@sabinmarcu/isdarktideoutyet@workspace:apps/isdarktideoutyet": - version: 0.0.0-use.local - resolution: "@sabinmarcu/isdarktideoutyet@workspace:apps/isdarktideoutyet" - dependencies: - "@sabinmarcu/types": "workspace:*" - "@sabinmarcu/utils-test": "workspace:*" - "@types/node": "npm:^20" - "@types/react": "npm:^18" - "@types/react-dom": "npm:^18" - dayjs: "npm:^1.11.12" - eslint: "npm:^8" - eslint-config-next: "npm:14.2.5" - next: "npm:14.2.5" - react: "npm:^18" - react-dom: "npm:^18" - typescript: "npm:^5" - languageName: unknown - linkType: soft - -"@sabinmarcu/isspacemarine2outyet@workspace:apps/isspacemarine2outyet": - version: 0.0.0-use.local - resolution: "@sabinmarcu/isspacemarine2outyet@workspace:apps/isspacemarine2outyet" - dependencies: - "@sabinmarcu/types": "workspace:*" - "@sabinmarcu/utils-test": "workspace:*" - "@types/node": "npm:^20" - "@types/react": "npm:^18" - "@types/react-dom": "npm:^18" - dayjs: "npm:^1.11.12" - eslint: "npm:^8" - eslint-config-next: "npm:14.2.5" - next: "npm:14.2.5" - react: "npm:^18" - react-dom: "npm:^18" - typescript: "npm:^5" - languageName: unknown - linkType: soft - "@sabinmarcu/jotai-storage-adapter-querystring@workspace:*, @sabinmarcu/jotai-storage-adapter-querystring@workspace:workspaces/libs/jotai-storage-adapter-querystring": version: 0.0.0-use.local resolution: "@sabinmarcu/jotai-storage-adapter-querystring@workspace:workspaces/libs/jotai-storage-adapter-querystring" @@ -6244,6 +6206,26 @@ __metadata: languageName: unknown linkType: soft +"@sabinmarcu/timer40k@workspace:apps/timer40k": + version: 0.0.0-use.local + resolution: "@sabinmarcu/timer40k@workspace:apps/timer40k" + dependencies: + "@sabinmarcu/types": "workspace:*" + "@sabinmarcu/utils-test": "workspace:*" + "@types/node": "npm:^20" + "@types/react": "npm:^18" + "@types/react-dom": "npm:^18" + dayjs: "npm:^1.11.12" + eslint: "npm:^8" + eslint-config-next: "npm:14.2.5" + next: "npm:14.2.5" + react: "npm:^18" + react-dom: "npm:^18" + typescript: "npm:^5" + zod: "npm:^3.23.8" + languageName: unknown + linkType: soft + "@sabinmarcu/types@workspace:*, @sabinmarcu/types@workspace:workspaces/libs/types": version: 0.0.0-use.local resolution: "@sabinmarcu/types@workspace:workspaces/libs/types"