diff --git a/apps/example-next-conform/.gitignore b/apps/example-next-conform/.gitignore
new file mode 100644
index 00000000..fd3dbb57
--- /dev/null
+++ b/apps/example-next-conform/.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/example-next-conform/README.md b/apps/example-next-conform/README.md
new file mode 100644
index 00000000..a3b5f139
--- /dev/null
+++ b/apps/example-next-conform/README.md
@@ -0,0 +1,12 @@
+# Examples next app with conform
+
+## Getting Started
+
+```
+$ pnpm i
+$ pnpm run dev
+```
+
+## Conform
+
+https://conform.guide/integration/nextjs
diff --git a/apps/example-next-conform/next.config.js b/apps/example-next-conform/next.config.js
new file mode 100644
index 00000000..c8028ecb
--- /dev/null
+++ b/apps/example-next-conform/next.config.js
@@ -0,0 +1,15 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ experimental: {
+ scrollRestoration: true,
+ },
+ productionBrowserSourceMaps: true,
+ webpack: (config, { isServer }) => {
+ if (isServer) {
+ config.devtool = "source-map";
+ }
+ return config;
+ },
+};
+
+module.exports = nextConfig;
diff --git a/apps/example-next-conform/package.json b/apps/example-next-conform/package.json
new file mode 100644
index 00000000..b6c89f2f
--- /dev/null
+++ b/apps/example-next-conform/package.json
@@ -0,0 +1,22 @@
+{
+ "private": true,
+ "scripts": {
+ "dev": "next dev --turbo",
+ "build": "next build",
+ "start": "next start"
+ },
+ "dependencies": {
+ "@conform-to/react": "1.0.6",
+ "@conform-to/zod": "1.0.6",
+ "next": "14.1.4",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "zod": "3.22.4"
+ },
+ "devDependencies": {
+ "@types/node": "20.11.30",
+ "@types/react": "18.2.67",
+ "@types/react-dom": "18.2.22",
+ "typescript": "5.4.3"
+ }
+}
diff --git a/apps/example-next-conform/src/app/dynamic-form/action.ts b/apps/example-next-conform/src/app/dynamic-form/action.ts
new file mode 100644
index 00000000..ff51c798
--- /dev/null
+++ b/apps/example-next-conform/src/app/dynamic-form/action.ts
@@ -0,0 +1,19 @@
+"use server";
+
+import { parseWithZod } from "@conform-to/zod";
+import { redirect } from "next/navigation";
+import { teamSchema } from "./schema";
+
+export async function saveTeam(prevState: unknown, formData: FormData) {
+ const submission = parseWithZod(formData, {
+ schema: teamSchema,
+ });
+
+ if (submission.status !== "success") {
+ return submission.reply();
+ }
+
+ console.log("submit data", submission.value);
+
+ redirect("/success");
+}
diff --git a/apps/example-next-conform/src/app/dynamic-form/form.tsx b/apps/example-next-conform/src/app/dynamic-form/form.tsx
new file mode 100644
index 00000000..34e25ac4
--- /dev/null
+++ b/apps/example-next-conform/src/app/dynamic-form/form.tsx
@@ -0,0 +1,71 @@
+"use client";
+
+import { getFormProps, getInputProps, useForm } from "@conform-to/react";
+import { parseWithZod } from "@conform-to/zod";
+import { useFormState } from "react-dom";
+import { saveTeam } from "./action";
+import { teamSchema } from "./schema";
+
+export default function Form() {
+ const [lastResult, action] = useFormState(saveTeam, undefined);
+ const [form, fields] = useForm({
+ lastResult,
+ onValidate({ formData }) {
+ return parseWithZod(formData, { schema: teamSchema });
+ },
+ shouldValidate: "onBlur",
+ });
+ const members = fields.members.getFieldList();
+
+ return (
+
+ );
+}
diff --git a/apps/example-next-conform/src/app/dynamic-form/page.tsx b/apps/example-next-conform/src/app/dynamic-form/page.tsx
new file mode 100644
index 00000000..57b956f3
--- /dev/null
+++ b/apps/example-next-conform/src/app/dynamic-form/page.tsx
@@ -0,0 +1,10 @@
+import Form from "./form";
+
+export default function Page() {
+ return (
+
+ Dynamic Form
+
+
+ );
+}
diff --git a/apps/example-next-conform/src/app/dynamic-form/schema.ts b/apps/example-next-conform/src/app/dynamic-form/schema.ts
new file mode 100644
index 00000000..663552f7
--- /dev/null
+++ b/apps/example-next-conform/src/app/dynamic-form/schema.ts
@@ -0,0 +1,19 @@
+import { z } from "zod";
+
+export const teamSchema = z.object({
+ leaderId: z.string({
+ required_error: "Leader is required",
+ }),
+ members: z.array(
+ z.object({
+ id: z.string().min(1),
+ name: z
+ .string({
+ required_error: "Name is required",
+ })
+ .min(1)
+ .max(100),
+ engineer: z.preprocess((x) => x === "on", z.boolean()),
+ }),
+ ),
+});
diff --git a/apps/example-next-conform/src/app/layout.tsx b/apps/example-next-conform/src/app/layout.tsx
new file mode 100644
index 00000000..225b6038
--- /dev/null
+++ b/apps/example-next-conform/src/app/layout.tsx
@@ -0,0 +1,11 @@
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/apps/example-next-conform/src/app/page.tsx b/apps/example-next-conform/src/app/page.tsx
new file mode 100644
index 00000000..16c14126
--- /dev/null
+++ b/apps/example-next-conform/src/app/page.tsx
@@ -0,0 +1,22 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+
+export const metadata: Metadata = {
+ title: "`conform` example",
+};
+
+export default function Home() {
+ return (
+
+ `conform` example
+
+ -
+ simple-form
+
+ -
+ dynamic-form
+
+
+
+ );
+}
diff --git a/apps/example-next-conform/src/app/simple-form/action.ts b/apps/example-next-conform/src/app/simple-form/action.ts
new file mode 100644
index 00000000..7472cbc4
--- /dev/null
+++ b/apps/example-next-conform/src/app/simple-form/action.ts
@@ -0,0 +1,19 @@
+"use server";
+
+import { parseWithZod } from "@conform-to/zod";
+import { redirect } from "next/navigation";
+import { userSchema } from "./schema";
+
+export async function saveUser(prevState: unknown, formData: FormData) {
+ const submission = parseWithZod(formData, {
+ schema: userSchema,
+ });
+
+ if (submission.status !== "success") {
+ return submission.reply();
+ }
+
+ console.log("submit data", submission.value);
+
+ redirect("/success");
+}
diff --git a/apps/example-next-conform/src/app/simple-form/form.tsx b/apps/example-next-conform/src/app/simple-form/form.tsx
new file mode 100644
index 00000000..a367641c
--- /dev/null
+++ b/apps/example-next-conform/src/app/simple-form/form.tsx
@@ -0,0 +1,42 @@
+"use client";
+
+import { getFormProps, getInputProps, useForm } from "@conform-to/react";
+import { parseWithZod } from "@conform-to/zod";
+import { useFormState } from "react-dom";
+import { saveUser } from "./action";
+import { userSchema } from "./schema";
+
+export default function Form() {
+ const [lastResult, action] = useFormState(saveUser, undefined);
+ const [form, fields] = useForm({
+ lastResult,
+ onValidate({ formData }) {
+ return parseWithZod(formData, { schema: userSchema });
+ },
+ shouldValidate: "onBlur",
+ });
+
+ return (
+
+ );
+}
diff --git a/apps/example-next-conform/src/app/simple-form/page.tsx b/apps/example-next-conform/src/app/simple-form/page.tsx
new file mode 100644
index 00000000..bb81a126
--- /dev/null
+++ b/apps/example-next-conform/src/app/simple-form/page.tsx
@@ -0,0 +1,10 @@
+import Form from "./form";
+
+export default function Page() {
+ return (
+
+ Simple Form
+
+
+ );
+}
diff --git a/apps/example-next-conform/src/app/simple-form/schema.ts b/apps/example-next-conform/src/app/simple-form/schema.ts
new file mode 100644
index 00000000..ac9e0986
--- /dev/null
+++ b/apps/example-next-conform/src/app/simple-form/schema.ts
@@ -0,0 +1,16 @@
+import { z } from "zod";
+
+export const userSchema = z.object({
+ firstName: z
+ .string({
+ required_error: "`First name` is required",
+ })
+ .min(1)
+ .max(100),
+ lastName: z
+ .string({
+ required_error: "`Last name` is required",
+ })
+ .min(1)
+ .max(100),
+});
diff --git a/apps/example-next-conform/src/app/success/page.tsx b/apps/example-next-conform/src/app/success/page.tsx
new file mode 100644
index 00000000..ead26b0a
--- /dev/null
+++ b/apps/example-next-conform/src/app/success/page.tsx
@@ -0,0 +1,12 @@
+import Link from "next/link";
+
+export default function Page() {
+ return (
+
+ Success!
+
+ top page
+
+
+ );
+}
diff --git a/apps/example-next-conform/tsconfig.json b/apps/example-next-conform/tsconfig.json
new file mode 100644
index 00000000..b6ba42e2
--- /dev/null
+++ b/apps/example-next-conform/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": false,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ]
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e87c4795..d30155ee 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -28,7 +28,7 @@ importers:
version: 18.2.22
'@vitejs/plugin-react':
specifier: 4.2.1
- version: 4.2.1(vite@5.2.6)
+ version: 4.2.1(vite@5.2.6(@types/node@20.12.11))
husky:
specifier: 9.0.11
version: 9.0.11
@@ -49,7 +49,7 @@ importers:
version: 18.2.0
tsup:
specifier: 8.0.2
- version: 8.0.2(typescript@5.4.5)
+ version: 8.0.2(postcss@8.4.38)(typescript@5.4.5)
turbo:
specifier: 1.13.3
version: 1.13.3
@@ -79,7 +79,7 @@ importers:
version: 18.2.22
next:
specifier: 14.2.3
- version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0)(react@18.2.0)
+ version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
react:
specifier: 18.2.0
version: 18.2.0
@@ -93,6 +93,40 @@ importers:
specifier: 3.23.8
version: 3.23.8
+ apps/example-next-conform:
+ dependencies:
+ '@conform-to/react':
+ specifier: 1.0.6
+ version: 1.0.6(react@18.2.0)
+ '@conform-to/zod':
+ specifier: 1.0.6
+ version: 1.0.6(zod@3.22.4)
+ next:
+ specifier: 14.1.4
+ version: 14.1.4(@babel/core@7.24.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ react:
+ specifier: 18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: 18.2.0
+ version: 18.2.0(react@18.2.0)
+ zod:
+ specifier: 3.22.4
+ version: 3.22.4
+ devDependencies:
+ '@types/node':
+ specifier: 20.11.30
+ version: 20.11.30
+ '@types/react':
+ specifier: 18.2.67
+ version: 18.2.67
+ '@types/react-dom':
+ specifier: 18.2.22
+ version: 18.2.22
+ typescript:
+ specifier: 5.4.3
+ version: 5.4.3
+
apps/example-next-custom-store:
dependencies:
'@location-state/core':
@@ -112,7 +146,7 @@ importers:
version: 18.2.22
next:
specifier: 14.2.3
- version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0)(react@18.2.0)
+ version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
qs:
specifier: 6.12.1
version: 6.12.1
@@ -152,7 +186,7 @@ importers:
version: 18.2.22
next:
specifier: 14.2.3
- version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0)(react@18.2.0)
+ version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
react:
specifier: 18.2.0
version: 18.2.0
@@ -176,10 +210,10 @@ importers:
devDependencies:
'@testing-library/jest-dom':
specifier: 6.4.5
- version: 6.4.5(vitest@1.6.0)
+ version: 6.4.5(vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0))
'@testing-library/react':
specifier: 15.0.7
- version: 15.0.7(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)
+ version: 15.0.7(@types/react@18.2.67)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@testing-library/user-event':
specifier: 14.5.2
version: 14.5.2(@testing-library/dom@10.0.0)
@@ -213,13 +247,13 @@ importers:
version: link:../configs
next:
specifier: 14.2.3
- version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0)(react@18.2.0)
+ version: 14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
packages/test-utils:
dependencies:
'@testing-library/react':
specifier: 15.0.7
- version: 15.0.7(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)
+ version: 15.0.7(@types/react@18.2.67)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@testing-library/user-event':
specifier: 14.5.2
version: 14.5.2(@testing-library/dom@10.0.0)
@@ -468,6 +502,19 @@ packages:
'@changesets/write@0.3.0':
resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==}
+ '@conform-to/dom@1.0.6':
+ resolution: {integrity: sha512-24teTftuAfcjv+SiaFYb9msjdQA7Kq8Yk9QkMPrkF8LETl80+i5fpCaIG8V91KyTitBeBcc80gg9HuPuuq3dqQ==}
+
+ '@conform-to/react@1.0.6':
+ resolution: {integrity: sha512-GHnUP89tGoikg7HhHP3V9U38BybyijjEV618GZFkqmW5o2jcViWsiLiY9XokJVEVckZ7aj5rZo3u6TfBv0lXlQ==}
+ peerDependencies:
+ react: '>=18'
+
+ '@conform-to/zod@1.0.6':
+ resolution: {integrity: sha512-l+fMqEymGG7wrCIdp7Lyt1UPKdlvHbM5KDHeGQkuIEgqISpDVwOH/xt3xb/THzW1unk6beYWh99xMuEmV/ATYw==}
+ peerDependencies:
+ zod: ^3.21.0
+
'@esbuild/aix-ppc64@0.20.2':
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
engines: {node: '>=12'}
@@ -777,57 +824,114 @@ packages:
'@manypkg/get-packages@1.1.3':
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
+ '@next/env@14.1.4':
+ resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==}
+
'@next/env@14.2.3':
resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==}
+ '@next/swc-darwin-arm64@14.1.4':
+ resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
'@next/swc-darwin-arm64@14.2.3':
resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
+ '@next/swc-darwin-x64@14.1.4':
+ resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
'@next/swc-darwin-x64@14.2.3':
resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
+ '@next/swc-linux-arm64-gnu@14.1.4':
+ resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
'@next/swc-linux-arm64-gnu@14.2.3':
resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ '@next/swc-linux-arm64-musl@14.1.4':
+ resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
'@next/swc-linux-arm64-musl@14.2.3':
resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ '@next/swc-linux-x64-gnu@14.1.4':
+ resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
'@next/swc-linux-x64-gnu@14.2.3':
resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ '@next/swc-linux-x64-musl@14.1.4':
+ resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
'@next/swc-linux-x64-musl@14.2.3':
resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ '@next/swc-win32-arm64-msvc@14.1.4':
+ resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
'@next/swc-win32-arm64-msvc@14.2.3':
resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
+ '@next/swc-win32-ia32-msvc@14.1.4':
+ resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
'@next/swc-win32-ia32-msvc@14.2.3':
resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
+ '@next/swc-win32-x64-msvc@14.1.4':
+ resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
'@next/swc-win32-x64-msvc@14.2.3':
resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==}
engines: {node: '>= 10'}
@@ -982,6 +1086,9 @@ packages:
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+ '@swc/helpers@0.5.2':
+ resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
+
'@swc/helpers@0.5.5':
resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
@@ -1051,6 +1158,9 @@ packages:
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+ '@types/node@20.11.30':
+ resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==}
+
'@types/node@20.12.11':
resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==}
@@ -2040,6 +2150,21 @@ packages:
navigation-api-types@0.5.1:
resolution: {integrity: sha512-STpzr4JvInYi+GFIckNe/dM5cKc9M7Q/ZLKLWcWxFzOCXCBK5Oog3PzjwXwJ18yCJ1RnPVgdVueQG357PIeiAA==}
+ next@14.1.4:
+ resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==}
+ engines: {node: '>=18.17.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ sass:
+ optional: true
+
next@14.2.3:
resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==}
engines: {node: '>=18.17.0'}
@@ -2736,6 +2861,11 @@ packages:
resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==}
engines: {node: '>= 0.4'}
+ typescript@5.4.3:
+ resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typescript@5.4.5:
resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
engines: {node: '>=14.17'}
@@ -2967,6 +3097,9 @@ packages:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'}
+ zod@3.22.4:
+ resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
+
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
@@ -3316,6 +3449,18 @@ snapshots:
human-id: 1.0.2
prettier: 2.8.8
+ '@conform-to/dom@1.0.6': {}
+
+ '@conform-to/react@1.0.6(react@18.2.0)':
+ dependencies:
+ '@conform-to/dom': 1.0.6
+ react: 18.2.0
+
+ '@conform-to/zod@1.0.6(zod@3.22.4)':
+ dependencies:
+ '@conform-to/dom': 1.0.6
+ zod: 3.22.4
+
'@esbuild/aix-ppc64@0.20.2':
optional: true
@@ -3501,32 +3646,61 @@ snapshots:
globby: 11.1.0
read-yaml-file: 1.1.0
+ '@next/env@14.1.4': {}
+
'@next/env@14.2.3': {}
+ '@next/swc-darwin-arm64@14.1.4':
+ optional: true
+
'@next/swc-darwin-arm64@14.2.3':
optional: true
+ '@next/swc-darwin-x64@14.1.4':
+ optional: true
+
'@next/swc-darwin-x64@14.2.3':
optional: true
+ '@next/swc-linux-arm64-gnu@14.1.4':
+ optional: true
+
'@next/swc-linux-arm64-gnu@14.2.3':
optional: true
+ '@next/swc-linux-arm64-musl@14.1.4':
+ optional: true
+
'@next/swc-linux-arm64-musl@14.2.3':
optional: true
+ '@next/swc-linux-x64-gnu@14.1.4':
+ optional: true
+
'@next/swc-linux-x64-gnu@14.2.3':
optional: true
+ '@next/swc-linux-x64-musl@14.1.4':
+ optional: true
+
'@next/swc-linux-x64-musl@14.2.3':
optional: true
+ '@next/swc-win32-arm64-msvc@14.1.4':
+ optional: true
+
'@next/swc-win32-arm64-msvc@14.2.3':
optional: true
+ '@next/swc-win32-ia32-msvc@14.1.4':
+ optional: true
+
'@next/swc-win32-ia32-msvc@14.2.3':
optional: true
+ '@next/swc-win32-x64-msvc@14.1.4':
+ optional: true
+
'@next/swc-win32-x64-msvc@14.2.3':
optional: true
@@ -3625,6 +3799,10 @@ snapshots:
'@swc/counter@0.1.3': {}
+ '@swc/helpers@0.5.2':
+ dependencies:
+ tslib: 2.6.2
+
'@swc/helpers@0.5.5':
dependencies:
'@swc/counter': 0.1.3
@@ -3641,7 +3819,7 @@ snapshots:
lz-string: 1.5.0
pretty-format: 27.5.1
- '@testing-library/jest-dom@6.4.5(vitest@1.6.0)':
+ '@testing-library/jest-dom@6.4.5(vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0))':
dependencies:
'@adobe/css-tools': 4.3.2
'@babel/runtime': 7.22.15
@@ -3651,16 +3829,18 @@ snapshots:
dom-accessibility-api: 0.6.3
lodash: 4.17.21
redent: 3.0.0
+ optionalDependencies:
vitest: 1.6.0(@types/node@20.12.11)(jsdom@24.0.0)
- '@testing-library/react@15.0.7(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)':
+ '@testing-library/react@15.0.7(@types/react@18.2.67)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@babel/runtime': 7.22.15
'@testing-library/dom': 10.0.0
- '@types/react': 18.2.67
'@types/react-dom': 18.2.22
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ optionalDependencies:
+ '@types/react': 18.2.67
'@testing-library/user-event@14.5.2(@testing-library/dom@10.0.0)':
dependencies:
@@ -3695,6 +3875,10 @@ snapshots:
'@types/node@12.20.55': {}
+ '@types/node@20.11.30':
+ dependencies:
+ undici-types: 5.26.5
+
'@types/node@20.12.11':
dependencies:
undici-types: 5.26.5
@@ -3721,7 +3905,7 @@ snapshots:
'@types/uuid@9.0.8': {}
- '@vitejs/plugin-react@4.2.1(vite@5.2.6)':
+ '@vitejs/plugin-react@4.2.1(vite@5.2.6(@types/node@20.12.11))':
dependencies:
'@babel/core': 7.24.3
'@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.3)
@@ -4790,10 +4974,34 @@ snapshots:
navigation-api-types@0.5.1: {}
- next@14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0)(react@18.2.0):
+ next@14.1.4(@babel/core@7.24.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
+ dependencies:
+ '@next/env': 14.1.4
+ '@swc/helpers': 0.5.2
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001597
+ 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.24.3)(react@18.2.0)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 14.1.4
+ '@next/swc-darwin-x64': 14.1.4
+ '@next/swc-linux-arm64-gnu': 14.1.4
+ '@next/swc-linux-arm64-musl': 14.1.4
+ '@next/swc-linux-x64-gnu': 14.1.4
+ '@next/swc-linux-x64-musl': 14.1.4
+ '@next/swc-win32-arm64-msvc': 14.1.4
+ '@next/swc-win32-ia32-msvc': 14.1.4
+ '@next/swc-win32-x64-msvc': 14.1.4
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ next@14.2.3(@babel/core@7.24.3)(@playwright/test@1.44.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
dependencies:
'@next/env': 14.2.3
- '@playwright/test': 1.44.0
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001597
@@ -4812,6 +5020,7 @@ snapshots:
'@next/swc-win32-arm64-msvc': 14.2.3
'@next/swc-win32-ia32-msvc': 14.2.3
'@next/swc-win32-x64-msvc': 14.2.3
+ '@playwright/test': 1.44.0
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -4951,10 +5160,12 @@ snapshots:
possible-typed-array-names@1.0.0: {}
- postcss-load-config@4.0.1:
+ postcss-load-config@4.0.1(postcss@8.4.38):
dependencies:
lilconfig: 2.1.0
yaml: 2.3.4
+ optionalDependencies:
+ postcss: 8.4.38
postcss@8.4.31:
dependencies:
@@ -5312,9 +5523,10 @@ snapshots:
styled-jsx@5.1.1(@babel/core@7.24.3)(react@18.2.0):
dependencies:
- '@babel/core': 7.24.3
client-only: 0.0.1
react: 18.2.0
+ optionalDependencies:
+ '@babel/core': 7.24.3
sucrase@3.34.0:
dependencies:
@@ -5387,7 +5599,7 @@ snapshots:
tslib@2.6.2: {}
- tsup@8.0.2(typescript@5.4.5):
+ tsup@8.0.2(postcss@8.4.38)(typescript@5.4.5):
dependencies:
bundle-require: 4.0.1(esbuild@0.19.7)
cac: 6.7.14
@@ -5397,12 +5609,14 @@ snapshots:
execa: 5.1.1
globby: 11.1.0
joycon: 3.1.1
- postcss-load-config: 4.0.1
+ postcss-load-config: 4.0.1(postcss@8.4.38)
resolve-from: 5.0.0
rollup: 4.5.2
source-map: 0.8.0-beta.0
sucrase: 3.34.0
tree-kill: 1.2.2
+ optionalDependencies:
+ postcss: 8.4.38
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
@@ -5485,6 +5699,8 @@ snapshots:
is-typed-array: 1.1.13
possible-typed-array-names: 1.0.0
+ typescript@5.4.3: {}
+
typescript@5.4.5: {}
ufo@1.5.3: {}
@@ -5539,16 +5755,15 @@ snapshots:
vite@5.2.6(@types/node@20.12.11):
dependencies:
- '@types/node': 20.12.11
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.13.0
optionalDependencies:
+ '@types/node': 20.12.11
fsevents: 2.3.3
vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0):
dependencies:
- '@types/node': 20.12.11
'@vitest/expect': 1.6.0
'@vitest/runner': 1.6.0
'@vitest/snapshot': 1.6.0
@@ -5558,7 +5773,6 @@ snapshots:
chai: 4.4.1
debug: 4.3.4
execa: 8.0.1
- jsdom: 24.0.0
local-pkg: 0.5.0
magic-string: 0.30.8
pathe: 1.1.2
@@ -5570,6 +5784,9 @@ snapshots:
vite: 5.2.6(@types/node@20.12.11)
vite-node: 1.6.0(@types/node@20.12.11)
why-is-node-running: 2.2.2
+ optionalDependencies:
+ '@types/node': 20.12.11
+ jsdom: 24.0.0
transitivePeerDependencies:
- less
- lightningcss
@@ -5717,4 +5934,6 @@ snapshots:
yocto-queue@1.0.0: {}
+ zod@3.22.4: {}
+
zod@3.23.8: {}