From 3073f9165c563cf0c91b42b127c89f264cd8fe3f Mon Sep 17 00:00:00 2001 From: molvqingtai Date: Fri, 17 Nov 2023 03:14:55 +0800 Subject: [PATCH] chore: options page base layout --- package.json | 15 +- pnpm-lock.yaml | 516 ++++++++---------- .../content}/components/EmojiButton.tsx | 0 .../content}/components/LikeButton.tsx | 0 .../content}/components/MessageInput.tsx | 0 .../content}/components/MessageItem.tsx | 4 +- .../content}/components/MessageList.tsx | 0 src/app/content/views/Footer/index.tsx | 6 +- src/app/content/views/Header/index.tsx | 4 +- src/app/content/views/Main/index.tsx | 4 +- src/app/options/App.css | 42 -- src/app/options/App.tsx | 41 +- src/app/options/components/Layout.tsx | 19 + src/app/options/index.html | 4 +- src/app/options/index.tsx | 21 + src/app/options/main.tsx | 10 - src/app/options/style.css | 69 --- src/assets/images/texture.png | Bin 0 -> 6290 bytes src/components/ui/Form.tsx | 143 +++++ src/components/ui/Label.tsx | 17 + src/domain/MessageList.ts | 2 +- src/impl/Storage.ts | 16 +- src/types/{index.d.ts => global.d.ts} | 0 tailwind.config.ts | 3 + 24 files changed, 466 insertions(+), 470 deletions(-) rename src/{ => app/content}/components/EmojiButton.tsx (100%) rename src/{ => app/content}/components/LikeButton.tsx (100%) rename src/{ => app/content}/components/MessageInput.tsx (100%) rename src/{ => app/content}/components/MessageItem.tsx (96%) rename src/{ => app/content}/components/MessageList.tsx (100%) delete mode 100644 src/app/options/App.css create mode 100644 src/app/options/components/Layout.tsx create mode 100644 src/app/options/index.tsx delete mode 100644 src/app/options/main.tsx delete mode 100644 src/app/options/style.css create mode 100644 src/assets/images/texture.png create mode 100644 src/components/ui/Form.tsx create mode 100644 src/components/ui/Label.tsx rename src/types/{index.d.ts => global.d.ts} (100%) diff --git a/package.json b/package.json index 876ab55..fc0ac75 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,13 @@ }, "homepage": "https://github.com/molvqingtai/WebChat#readme", "dependencies": { + "@hookform/resolvers": "^3.3.2", "@perfsee/jsonr": "^1.8.4", "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-hover-card": "^1.0.7", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", @@ -61,6 +63,7 @@ "peerjs": "^1.5.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hook-form": "^7.48.2", "react-markdown": "^9.0.1", "react-nice-avatar": "^1.4.1", "react-use": "^17.4.0", @@ -71,15 +74,17 @@ "remesh-react": "^4.1.0", "rxjs": "^7.8.1", "tailwind-merge": "^2.0.0", - "type-fest": "^4.7.1" + "type-fest": "^4.7.1", + "valibot": "^0.20.1", + "zod": "^3.22.4" }, "devDependencies": { - "@commitlint/cli": "^18.4.1", - "@commitlint/config-conventional": "^18.4.0", + "@commitlint/cli": "^18.4.2", + "@commitlint/config-conventional": "^18.4.2", "@types/node": "^20.9.0", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", - "@vitejs/plugin-react": "^4.1.1", + "@vitejs/plugin-react": "^4.2.0", "autoprefixer": "^10.4.16", "cross-env": "^7.0.3", "eslint": "^8.53.0", @@ -102,7 +107,7 @@ "tailwindcss-animate": "^1.0.7", "typescript": "^5.2.2", "webext-bridge": "^6.0.1", - "wxt": "^0.10.0" + "wxt": "^0.10.1" }, "lint-staged": { "*.{js,jsx,ts,tsx}": "eslint --fix" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74e4a14..7b894cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@hookform/resolvers': + specifier: ^3.3.2 + version: 3.3.2(react-hook-form@7.48.2) '@perfsee/jsonr': specifier: ^1.8.4 version: 1.8.4 @@ -20,6 +23,9 @@ dependencies: '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.0.2(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.7 version: 1.0.7(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) @@ -59,6 +65,9 @@ dependencies: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: ^7.48.2 + version: 7.48.2(react@18.2.0) react-markdown: specifier: ^9.0.1 version: 9.0.1(@types/react@18.2.37)(react@18.2.0) @@ -92,14 +101,20 @@ dependencies: type-fest: specifier: ^4.7.1 version: 4.7.1 + valibot: + specifier: ^0.20.1 + version: 0.20.1 + zod: + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@commitlint/cli': - specifier: ^18.4.1 - version: 18.4.1(typescript@5.2.2) + specifier: ^18.4.2 + version: 18.4.2(typescript@5.2.2) '@commitlint/config-conventional': - specifier: ^18.4.0 - version: 18.4.0 + specifier: ^18.4.2 + version: 18.4.2 '@types/node': specifier: ^20.9.0 version: 20.9.0 @@ -110,8 +125,8 @@ devDependencies: specifier: ^18.2.15 version: 18.2.15 '@vitejs/plugin-react': - specifier: ^4.1.1 - version: 4.1.1(vite@4.5.0) + specifier: ^4.2.0 + version: 4.2.0(vite@5.0.0) autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) @@ -179,8 +194,8 @@ devDependencies: specifier: ^6.0.1 version: 6.0.1 wxt: - specifier: ^0.10.0 - version: 0.10.0(@types/node@20.9.0)(idb-keyval@6.2.1) + specifier: ^0.10.1 + version: 0.10.1(@types/node@20.9.0)(idb-keyval@6.2.1) packages: @@ -479,14 +494,14 @@ packages: dev: false optional: true - /@commitlint/cli@18.4.1(typescript@5.2.2): - resolution: {integrity: sha512-4+jljfd29Udw9RDDyigavLO9LvdbmB8O9xjDzVZ0R3lJuG7nCeyHgnKWIVpFaN590isZMV/cMeQK0gH7hRF40A==} + /@commitlint/cli@18.4.2(typescript@5.2.2): + resolution: {integrity: sha512-dDfb2+wzeQe6ogdHNHOy0J0nraok+La0BoxamNMhBOng9/5GoESPDmKUJ1Lt1oivh5MfIgZh0Vm6f0rxkB8CoA==} engines: {node: '>=v18'} hasBin: true dependencies: '@commitlint/format': 18.4.0 - '@commitlint/lint': 18.4.0 - '@commitlint/load': 18.4.1(typescript@5.2.2) + '@commitlint/lint': 18.4.2 + '@commitlint/load': 18.4.2(typescript@5.2.2) '@commitlint/read': 18.4.0 '@commitlint/types': 18.4.0 execa: 5.1.1 @@ -498,8 +513,8 @@ packages: - typescript dev: true - /@commitlint/config-conventional@18.4.0: - resolution: {integrity: sha512-vArwCZopsZs0FnGsh9AR7uUTPZ5oVGk8+qnEZWq2KTsMjrE0k80b+oZ32GSQmXQT2iMKVrDC8pKX5uKNkCe9Sw==} + /@commitlint/config-conventional@18.4.2: + resolution: {integrity: sha512-qFjIqgKGV89lzUGHxanq2WJDXk5wZIxoZmZvf0I4i4CirL06Xj8qRh1shPsXNyI15d8Rj2HExww6cGJSFU9DdA==} engines: {node: '>=v18'} dependencies: conventional-changelog-conventionalcommits: 7.0.2 @@ -538,26 +553,26 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored@18.4.0: - resolution: {integrity: sha512-vyBKBj3Q4N3Xe4ZQcJXW9ef6gVrDL9Fl2HXnnC3F0Qt/F6E4runhJkEuUh5DB3WCXTJUHIJkByKPqrnz4RNrZw==} + /@commitlint/is-ignored@18.4.2: + resolution: {integrity: sha512-uujjyJlrXsMsQrv0r8HDGigAwJELPAMtA1Vxi2WUB54HbyAWa0Ue6ujMRZNKov2YeA96r6o72gLDnugb6yu8IA==} engines: {node: '>=v18'} dependencies: '@commitlint/types': 18.4.0 semver: 7.5.4 dev: true - /@commitlint/lint@18.4.0: - resolution: {integrity: sha512-Wkkf1DPVeLdHYGqtzMBfWoMbUtCojvlzDR89OKVic1rid41iZbb0FzTcwgMYs/1TNWNxoIq9PVVwY7ovLX1aJQ==} + /@commitlint/lint@18.4.2: + resolution: {integrity: sha512-ljGOIH7w9SnjvZFoKjf30iWFxDnezfRtOc50+rNLdDP0TpLspaYYLPhDO/TeVdmii1/AJiDgBIuBboQlaIy7Bw==} engines: {node: '>=v18'} dependencies: - '@commitlint/is-ignored': 18.4.0 + '@commitlint/is-ignored': 18.4.2 '@commitlint/parse': 18.4.0 '@commitlint/rules': 18.4.0 '@commitlint/types': 18.4.0 dev: true - /@commitlint/load@18.4.1(typescript@5.2.2): - resolution: {integrity: sha512-o/plBiPJQgbSq/4ipDpsq4HCmURjBAEjr1EO/p2falr3VhwV0WGXTvb8NlihgI8xtSyO6lHvtycrE535GMLQbA==} + /@commitlint/load@18.4.2(typescript@5.2.2): + resolution: {integrity: sha512-CKmzXdF9XwZJoVijAqpUlV9qzZOkyiYni4KuSCtTZVAAVudi9H84cJ4FqZxSwEP9G21vmoJiNrW8G042AsduVg==} engines: {node: '>=v18'} dependencies: '@commitlint/config-validator': 18.4.0 @@ -669,15 +684,6 @@ packages: - supports-color dev: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.19.5: resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} engines: {node: '>=12'} @@ -687,15 +693,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.5: resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} engines: {node: '>=12'} @@ -705,15 +702,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.5: resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} engines: {node: '>=12'} @@ -723,15 +711,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.5: resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} engines: {node: '>=12'} @@ -741,15 +720,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.5: resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} engines: {node: '>=12'} @@ -759,15 +729,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.5: resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} engines: {node: '>=12'} @@ -777,15 +738,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.5: resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} engines: {node: '>=12'} @@ -795,15 +747,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.5: resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} engines: {node: '>=12'} @@ -813,15 +756,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.5: resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} engines: {node: '>=12'} @@ -831,15 +765,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.5: resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} engines: {node: '>=12'} @@ -849,15 +774,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.5: resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} engines: {node: '>=12'} @@ -867,15 +783,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.5: resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} engines: {node: '>=12'} @@ -885,15 +792,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.5: resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} engines: {node: '>=12'} @@ -903,15 +801,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.5: resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} engines: {node: '>=12'} @@ -921,15 +810,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.5: resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} engines: {node: '>=12'} @@ -939,15 +819,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.5: resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} engines: {node: '>=12'} @@ -957,15 +828,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.5: resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} engines: {node: '>=12'} @@ -975,15 +837,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.5: resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} engines: {node: '>=12'} @@ -993,15 +846,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.5: resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} engines: {node: '>=12'} @@ -1011,15 +855,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.5: resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} engines: {node: '>=12'} @@ -1029,15 +864,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.5: resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} engines: {node: '>=12'} @@ -1047,15 +873,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.5: resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} engines: {node: '>=12'} @@ -1088,7 +905,7 @@ packages: debug: 4.3.4 espree: 9.6.1 globals: 13.23.0 - ignore: 5.2.4 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1130,6 +947,14 @@ packages: resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} dev: false + /@hookform/resolvers@3.3.2(react-hook-form@7.48.2): + resolution: {integrity: sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA==} + peerDependencies: + react-hook-form: ^7.0.0 + dependencies: + react-hook-form: 7.48.2(react@18.2.0) + dev: false + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} @@ -1301,6 +1126,7 @@ packages: dependencies: is-glob: 4.0.3 micromatch: 4.0.5 + napi-wasm: 1.1.0 dev: true bundledDependencies: - napi-wasm @@ -1665,6 +1491,27 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.37 + '@types/react-dom': 18.2.15 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: @@ -2013,6 +1860,102 @@ packages: picomatch: 2.3.1 dev: true + /@rollup/rollup-android-arm-eabi@4.4.1: + resolution: {integrity: sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.4.1: + resolution: {integrity: sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.4.1: + resolution: {integrity: sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.4.1: + resolution: {integrity: sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.4.1: + resolution: {integrity: sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.4.1: + resolution: {integrity: sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.4.1: + resolution: {integrity: sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.4.1: + resolution: {integrity: sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.4.1: + resolution: {integrity: sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.4.1: + resolution: {integrity: sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.4.1: + resolution: {integrity: sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.4.1: + resolution: {integrity: sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@sindresorhus/is@5.6.0: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} @@ -2186,7 +2129,7 @@ packages: debug: 4.3.4 eslint: 8.53.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.2.2) @@ -2300,18 +2243,18 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@vitejs/plugin-react@4.1.1(vite@4.5.0): - resolution: {integrity: sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==} + /@vitejs/plugin-react@4.2.0(vite@5.0.0): + resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 + vite: ^4.2.0 || ^5.0.0 dependencies: '@babel/core': 7.23.3 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.3) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.3) '@types/babel__core': 7.20.4 react-refresh: 0.14.0 - vite: 4.5.0(@types/node@20.9.0) + vite: 5.0.0(@types/node@20.9.0) transitivePeerDependencies: - supports-color dev: true @@ -2683,7 +2626,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001562 - electron-to-chromium: 1.4.583 + electron-to-chromium: 1.4.586 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true @@ -3464,8 +3407,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.583: - resolution: {integrity: sha512-93y1gcONABZ7uqYe/JWDVQP/Pj/sQSunF0HVAPdlg/pfBnOyBMLlQUxWvkqcljJg1+W6cjvPuYD+r1Th9Tn8mA==} + /electron-to-chromium@1.4.586: + resolution: {integrity: sha512-qMa+E6yf1fNQbg3G66pHLXeJUP5CCCzNat1VPczOZOqgI2w4u+8y9sQnswMdGs5m4C1rOePq37EVBr/nsPQY7w==} dev: true /emoji-regex@10.3.0: @@ -3589,36 +3532,6 @@ packages: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /esbuild@0.19.5: resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} engines: {node: '>=12'} @@ -3815,7 +3728,7 @@ packages: eslint: 8.53.0 eslint-plugin-es-x: 7.3.0(eslint@8.53.0) get-tsconfig: 4.7.2 - ignore: 5.2.4 + ignore: 5.3.0 is-builtin-module: 3.2.1 is-core-module: 2.13.1 minimatch: 3.1.2 @@ -3941,7 +3854,7 @@ packages: glob-parent: 6.0.2 globals: 13.23.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4429,7 +4342,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.2.4 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -4485,7 +4398,7 @@ packages: destr: 2.0.2 iron-webcrypto: 0.10.1 radix3: 1.1.0 - ufo: 1.3.1 + ufo: 1.3.2 uncrypto: 0.1.3 unenv: 1.7.4 dev: true @@ -4650,8 +4563,8 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} dev: true @@ -5292,7 +5205,7 @@ packages: node-forge: 1.3.1 pathe: 1.1.1 std-env: 3.5.0 - ufo: 1.3.1 + ufo: 1.3.2 untun: 0.1.2 uqr: 0.1.2 dev: true @@ -6023,7 +5936,7 @@ packages: acorn: 8.11.2 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.3.1 + ufo: 1.3.2 dev: true /moment@2.29.4: @@ -6115,6 +6028,10 @@ packages: hasBin: true dev: false + /napi-wasm@1.1.0: + resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==} + dev: true + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -6307,7 +6224,7 @@ packages: dependencies: destr: 2.0.2 node-fetch-native: 1.4.1 - ufo: 1.3.1 + ufo: 1.3.2 dev: true /ohash@1.1.3: @@ -6763,6 +6680,15 @@ packages: scheduler: 0.23.0 dev: false + /react-hook-form@7.48.2(react@18.2.0): + resolution: {integrity: sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A==} + engines: {node: '>=12.22.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + dependencies: + react: 18.2.0 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -7230,11 +7156,23 @@ packages: yargs: 17.7.2 dev: true - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + /rollup@4.4.1: + resolution: {integrity: sha512-idZzrUpWSblPJX66i+GzrpjKE3vbYrlWirUHteoAbjKReZwa0cohAErOYA5efoMmNCdvG9yrJS+w9Kl6csaH4w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.4.1 + '@rollup/rollup-android-arm64': 4.4.1 + '@rollup/rollup-darwin-arm64': 4.4.1 + '@rollup/rollup-darwin-x64': 4.4.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.4.1 + '@rollup/rollup-linux-arm64-gnu': 4.4.1 + '@rollup/rollup-linux-arm64-musl': 4.4.1 + '@rollup/rollup-linux-x64-gnu': 4.4.1 + '@rollup/rollup-linux-x64-musl': 4.4.1 + '@rollup/rollup-win32-arm64-msvc': 4.4.1 + '@rollup/rollup-win32-ia32-msvc': 4.4.1 + '@rollup/rollup-win32-x64-msvc': 4.4.1 fsevents: 2.3.3 dev: true @@ -7309,8 +7247,8 @@ packages: engines: {node: '>=0.10.0'} dev: false - /scule@1.0.0: - resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} + /scule@1.1.0: + resolution: {integrity: sha512-vRUjqhyM/YWYzT+jsMk6tnl3NkY4A4soJ8uyh3O6Um+JXEQL9ozUCe7pqrxn3CSKokw0hw3nFStfskzpgYwR0g==} dev: true /sdp@3.2.0: @@ -8039,8 +7977,8 @@ packages: hasBin: true dev: true - /ufo@1.3.1: - resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true /uhyphen@0.2.0: @@ -8097,7 +8035,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 pkg-types: 1.0.3 - scule: 1.0.0 + scule: 1.1.0 strip-literal: 1.3.0 unplugin: 1.5.0 transitivePeerDependencies: @@ -8215,7 +8153,7 @@ packages: mri: 1.2.0 node-fetch-native: 1.4.1 ofetch: 1.3.3 - ufo: 1.3.1 + ufo: 1.3.2 transitivePeerDependencies: - supports-color dev: true @@ -8322,6 +8260,10 @@ packages: hasBin: true dev: true + /valibot@0.20.1: + resolution: {integrity: sha512-7lToTLG5wtK76u32gq8dUK0bAw7bknTGbeNSKRJunAC2soGVnNrKngg+38Jjt6FOwH+MshUONHoFz+LgmjeYKQ==} + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -8344,12 +8286,12 @@ packages: vfile-message: 4.0.2 dev: false - /vite@4.5.0(@types/node@20.9.0): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} + /vite@5.0.0(@types/node@20.9.0): + resolution: {integrity: sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': '>= 14' + '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -8373,9 +8315,9 @@ packages: optional: true dependencies: '@types/node': 20.9.0 - esbuild: 0.18.20 + esbuild: 0.19.5 postcss: 8.4.31 - rollup: 3.29.4 + rollup: 4.4.1 optionalDependencies: fsevents: 2.3.3 dev: true @@ -8584,8 +8526,8 @@ packages: optional: true dev: true - /wxt@0.10.0(@types/node@20.9.0)(idb-keyval@6.2.1): - resolution: {integrity: sha512-Ev616eQzDEIucKWVrqNCbOiYtZsyixeaBcuqLjm8Bj3OK7ZYyCd3YS/6Cq7zXEQCtduzUvu7KEzgoT3yTHxQlg==} + /wxt@0.10.1(@types/node@20.9.0)(idb-keyval@6.2.1): + resolution: {integrity: sha512-si5o4JJenoR4qXKFsnPClqmQEoqNS6pwRFM8sbowrRjWlQkO8yUpfKIafCae/eTzw1NnlkzEb6jlBXACz1QVGg==} engines: {node: '>=18', pnpm: '>=8'} hasBin: true dependencies: @@ -8615,7 +8557,7 @@ packages: rollup-plugin-visualizer: 5.9.2 unimport: 3.5.0 unstorage: 1.10.1(idb-keyval@6.2.1) - vite: 4.5.0(@types/node@20.9.0) + vite: 5.0.0(@types/node@20.9.0) web-ext-run: 0.1.0 webextension-polyfill: 0.10.0 zip-dir: 2.0.0 @@ -8715,6 +8657,10 @@ packages: jszip: 3.10.1 dev: true + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false diff --git a/src/components/EmojiButton.tsx b/src/app/content/components/EmojiButton.tsx similarity index 100% rename from src/components/EmojiButton.tsx rename to src/app/content/components/EmojiButton.tsx diff --git a/src/components/LikeButton.tsx b/src/app/content/components/LikeButton.tsx similarity index 100% rename from src/components/LikeButton.tsx rename to src/app/content/components/LikeButton.tsx diff --git a/src/components/MessageInput.tsx b/src/app/content/components/MessageInput.tsx similarity index 100% rename from src/components/MessageInput.tsx rename to src/app/content/components/MessageInput.tsx diff --git a/src/components/MessageItem.tsx b/src/app/content/components/MessageItem.tsx similarity index 96% rename from src/components/MessageItem.tsx rename to src/app/content/components/MessageItem.tsx index d3ef8d3..e6e35ed 100644 --- a/src/components/MessageItem.tsx +++ b/src/app/content/components/MessageItem.tsx @@ -1,11 +1,11 @@ import { type FC, useState } from 'react' import { format } from 'date-fns' import { FrownIcon, ThumbsUpIcon } from 'lucide-react' +import LikeButton from './LikeButton' import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/Avatar' -import LikeButton from '@/components/LikeButton' import { Markdown } from '@/components/ui/Markdown' -import { type Message } from '@/types' +import { type Message } from '@/types/global' export interface MessageItemProps { data: Message diff --git a/src/components/MessageList.tsx b/src/app/content/components/MessageList.tsx similarity index 100% rename from src/components/MessageList.tsx rename to src/app/content/components/MessageList.tsx diff --git a/src/app/content/views/Footer/index.tsx b/src/app/content/views/Footer/index.tsx index 8e11c8a..e66e4c3 100644 --- a/src/app/content/views/Footer/index.tsx +++ b/src/app/content/views/Footer/index.tsx @@ -1,13 +1,13 @@ import { useRef, type FC } from 'react' import { CornerDownLeftIcon } from 'lucide-react' import { useRemeshDomain, useRemeshQuery, useRemeshSend } from 'remesh-react' +import MessageInput from '../../components/MessageInput' +import EmojiButton from '../../components/EmojiButton' import { Button } from '@/components/ui/Button' -import MessageInput from '@/components/MessageInput' import MessageInputDomain from '@/domain/MessageInput' import MessageListDomain from '@/domain/MessageList' import { MESSAGE_MAX_LENGTH } from '@/constants' -import EmojiButton from '@/components/EmojiButton' -import { type Message } from '@/types' +import { type Message } from '@/types/global' const Footer: FC = () => { const send = useRemeshSend() diff --git a/src/app/content/views/Header/index.tsx b/src/app/content/views/Header/index.tsx index b19374d..efc877d 100644 --- a/src/app/content/views/Header/index.tsx +++ b/src/app/content/views/Header/index.tsx @@ -13,7 +13,7 @@ const Header: FC = () => { - + @@ -29,7 +29,7 @@ const Header: FC = () => { - +
diff --git a/src/app/content/views/Main/index.tsx b/src/app/content/views/Main/index.tsx index 8e11253..6294275 100644 --- a/src/app/content/views/Main/index.tsx +++ b/src/app/content/views/Main/index.tsx @@ -1,8 +1,8 @@ import { useEffect, type FC, useRef } from 'react' import { useRemeshDomain, useRemeshQuery } from 'remesh-react' -import MessageList from '@/components/MessageList' -import MessageItem from '@/components/MessageItem' +import MessageList from '../../components/MessageList' +import MessageItem from '../../components/MessageItem' import MessageListDomain from '@/domain/MessageList' const Main: FC = () => { diff --git a/src/app/options/App.css b/src/app/options/App.css deleted file mode 100644 index f8aa57a..0000000 --- a/src/app/options/App.css +++ /dev/null @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #54bc4ae0); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/src/app/options/App.tsx b/src/app/options/App.tsx index a29ee5b..defd1f2 100644 --- a/src/app/options/App.tsx +++ b/src/app/options/App.tsx @@ -1,44 +1,7 @@ -import { useRef, useState } from 'react' -import { useClickAway } from 'react-use' -import wxtLogo from '/wxt.svg' -import reactLogo from '@/assets/react.svg' -import './App.css' +import Layout from './components/Layout' function App() { - const [count, setCount] = useState(0) - const menuRef = useRef(null) - useClickAway( - menuRef, - (...params) => { - console.log(params) - - // setOpen(false) - }, - ['click'] - ) - - return ( - <> -
- - WXT logo - - - React logo - -
-

- -

-
- -

- Edit src/App.tsx and save to test HMR -

-
-

Click on the WXT and React logos to learn more

- - ) + return 11 } export default App diff --git a/src/app/options/components/Layout.tsx b/src/app/options/components/Layout.tsx new file mode 100644 index 0000000..94128ad --- /dev/null +++ b/src/app/options/components/Layout.tsx @@ -0,0 +1,19 @@ +import { type ReactNode, type FC } from 'react' + +export interface AppLayoutProps { + children?: ReactNode +} + +const Layout: FC = ({ children }) => { + return ( +
+
+ {children} +
+
+ ) +} + +Layout.displayName = 'Layout' + +export default Layout diff --git a/src/app/options/index.html b/src/app/options/index.html index 7e4b0ca..c744f39 100644 --- a/src/app/options/index.html +++ b/src/app/options/index.html @@ -3,11 +3,11 @@ - User Config + WEB CHAT
- + diff --git a/src/app/options/index.tsx b/src/app/options/index.tsx new file mode 100644 index 0000000..069246b --- /dev/null +++ b/src/app/options/index.tsx @@ -0,0 +1,21 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import { Remesh } from 'remesh' +import { RemeshRoot } from 'remesh-react' +import { RemeshLogger } from 'remesh-logger' +import App from './App' +import { StorageBrowserSyncImpl } from '@/impl/Storage' +import '@/assets/styles/tailwind.css' + +const store = Remesh.store({ + externs: [StorageBrowserSyncImpl], + inspectors: [RemeshLogger()] +}) + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + + + +) diff --git a/src/app/options/main.tsx b/src/app/options/main.tsx deleted file mode 100644 index f9e120b..0000000 --- a/src/app/options/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import './style.css' - -ReactDOM.createRoot(document.getElementById('root')!).render( - - - -) diff --git a/src/app/options/style.css b/src/app/options/style.css deleted file mode 100644 index 2c3fac6..0000000 --- a/src/app/options/style.css +++ /dev/null @@ -1,69 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/src/assets/images/texture.png b/src/assets/images/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..39a084a42c57a8cb4bfeac79b081861e004043ff GIT binary patch literal 6290 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 Gf&T~fb^a9q literal 0 HcmV?d00001 diff --git a/src/components/ui/Form.tsx b/src/components/ui/Form.tsx new file mode 100644 index 0000000..b10e74c --- /dev/null +++ b/src/components/ui/Form.tsx @@ -0,0 +1,143 @@ +import * as React from 'react' +import type * as LabelPrimitive from '@radix-ui/react-label' +import { Slot } from '@radix-ui/react-slot' +import { + Controller, + type ControllerProps, + type FieldPath, + type FieldValues, + FormProvider, + useFormContext +} from 'react-hook-form' + +import { cn } from '@/utils/index' +import { Label } from '@/components/ui/Label' + +const Form = FormProvider + +interface FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +> { + name: TName +} + +const FormFieldContext = React.createContext({} as FormFieldContextValue) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error('useFormField should be used within ') + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState + } +} + +interface FormItemContextValue { + id: string +} + +const FormItemContext = React.createContext({} as FormItemContextValue) + +const FormItem = React.forwardRef>( + ({ className, ...props }, ref) => { + const id = React.useId() + + return ( + +
+ + ) + } +) +FormItem.displayName = 'FormItem' + +const FormLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField() + + return