feat(giriş): giriş ve kayıt ekranları

- Giriş: satır içi doğrulama, şifre göster/gizle, beni hatırla, hoş geldin bildirimi
- Kayıt: yeni hane kur / davetle katıl, /kayit?davet=KOD bağlantısı
- Sunucu hataları ilgili alanda gösterilir (kayıtlı e-posta, geçersiz davet)
- react-hook-form + zod, sonner bildirimleri, shadcn input/label/checkbox/card
- Ortak form bileşenleri (FormField, PasswordInput, FormError)
- 8 form kuralı testi (toplam 47); api.http demo hesaplara güncellendi
- Faz 2 tamamlandı

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 00:52:13 +03:00
parent c6d4c30461
commit b269411823
20 changed files with 886 additions and 62 deletions
+155 -1
View File
@@ -9,6 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@fontsource-variable/inter": "^5.3.0",
"@hookform/resolvers": "^7.0.5",
"@tailwindcss/vite": "^4.3.5",
"@tanstack/react-query": "^5.107.1",
"class-variance-authority": "^0.7.1",
@@ -17,10 +18,13 @@
"radix-ui": "^1.8.1",
"react": "^19.3.1",
"react-dom": "^19.3.1",
"react-hook-form": "^7.92.0",
"react-router": "^8.5.1",
"shadcn": "^4.23.0",
"sonner": "^2.0.8",
"tailwindcss": "^4.3.5",
"tw-animate-css": "^1.4.0"
"tw-animate-css": "^1.4.0",
"zod": "^4.6.7"
},
"devDependencies": {
"@types/node": "^24.19.2",
@@ -698,6 +702,112 @@
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@hookform/resolvers": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-7.0.5.tgz",
"integrity": "sha512-E7ca3tpIJxHPGhFOfXLlCCZh7up6EcnUTbgTt0SRUENXagq8DJnob9rK+VqsNCsfUuO6mMU5NYNm6BaL18flgQ==",
"license": "MIT",
"dependencies": {
"@standard-schema/utils": "^0.3.0"
},
"peerDependencies": {
"@standard-schema/spec": "^1.0.0",
"@vinejs/vine": "^2.0.0 || ^3.0.0 || ^4.0.0",
"ajv": "^8.12.0",
"ajv-errors": "^3.0.0",
"ajv-formats": "^2.1.1 || ^3.0.0",
"arktype": "^2.0.0",
"ata-validator": "^1.23.0",
"class-transformer": ">=0.4.0",
"class-validator": ">=0.12.0",
"computed-types": "^1.0.0",
"effect": "^4.0.0",
"fluentvalidation-ts": "^3.0.0",
"fp-ts": "^2.7.0",
"io-ts": "^2.0.0",
"joi": "^17.0.0 || ^18.0.0",
"nope-validator": ">=0.12.0",
"react-hook-form": "^7.55.0",
"superstruct": ">=0.12.0",
"typanion": "^3.3.2",
"typebox": "^1.0.0",
"valibot": ">=0.31.0 || ^1.0.0-beta.4 || ^1.0.0-rc",
"vest": ">=6.0.0",
"yup": "^1.0.0",
"zod": "^3.25.0 || ^4.0.0"
},
"peerDependenciesMeta": {
"@standard-schema/spec": {
"optional": true
},
"@vinejs/vine": {
"optional": true
},
"ajv": {
"optional": true
},
"ajv-errors": {
"optional": true
},
"ajv-formats": {
"optional": true
},
"arktype": {
"optional": true
},
"ata-validator": {
"optional": true
},
"class-transformer": {
"optional": true
},
"class-validator": {
"optional": true
},
"computed-types": {
"optional": true
},
"effect": {
"optional": true
},
"fluentvalidation-ts": {
"optional": true
},
"fp-ts": {
"optional": true
},
"io-ts": {
"optional": true
},
"joi": {
"optional": true
},
"nope-validator": {
"optional": true
},
"superstruct": {
"optional": true
},
"typanion": {
"optional": true
},
"typebox": {
"optional": true
},
"valibot": {
"optional": true
},
"vest": {
"optional": true
},
"yup": {
"optional": true
},
"zod": {
"optional": true
}
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -3035,6 +3145,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@standard-schema/utils": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
"integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
"license": "MIT"
},
"node_modules/@tailwindcss/node": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.5.tgz",
@@ -5984,6 +6100,28 @@
"react": "^19.3.1"
}
},
"node_modules/react-hook-form": {
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.92.0.tgz",
"integrity": "sha512-O5ILyY5fYHN7N13Pfxpe55KboyNFsJdM03BHpshQkClJd8raugiAUGY7VjifITrfhVxyx81ko25azXCoayhf1w==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/react-hook-form"
},
"peerDependencies": {
"@types/react": "*",
"react": "^16.8.0 || ^17 || ^18 || ^19"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/react-remove-scroll": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz",
@@ -6354,6 +6492,22 @@
"npm": ">= 3.0.0"
}
},
"node_modules/sonner": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.8.tgz",
"integrity": "sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg==",
"license": "MIT",
"peerDependencies": {
"@types/react": "^18.0.0 || ^19.0.0",
"react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
"react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",