This commit is contained in:
Timo Knuth
2025-10-18 17:55:32 +02:00
parent 254e6490b8
commit 91b78cb284
65 changed files with 4481 additions and 1078 deletions

View File

@@ -53,7 +53,7 @@ export default function CreatePage() {
};
fetchUserPlan();
}, []);
const contrast = calculateContrast(foregroundColor, backgroundColor);
const hasGoodContrast = contrast >= 4.5;
@@ -123,7 +123,7 @@ export default function CreatePage() {
light: backgroundColor,
},
});
const blob = new Blob([svg], { type: 'image/svg+xml' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
@@ -165,9 +165,9 @@ export default function CreatePage() {
size,
},
};
console.log('SENDING QR DATA:', qrData);
const response = await fetch('/api/qrs', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -287,7 +287,8 @@ export default function CreatePage() {
return (
<div className="max-w-6xl mx-auto">
<div className="mb-8">
<h1 className="text-3xl font-bold text-gray-900">Create QR Code</h1>
<h1 className="text-3xl font-bold text-gray-900">{t('create.title')}</h1>
<p className="text-gray-600 mt-2">{t('create.subtitle')}</p>
</div>
<form onSubmit={handleSubmit}>
@@ -307,21 +308,21 @@ export default function CreatePage() {
placeholder="My QR Code"
required
/>
<Select
label="Content Type"
value={contentType}
onChange={(e) => setContentType(e.target.value)}
options={contentTypes}
/>
{renderContentFields()}
<Input
label="Tags (comma-separated)"
value={tags}
onChange={(e) => setTags(e.target.value)}
placeholder="marketing, campaign, 2024"
placeholder="marketing, campaign, 2025"
/>
</CardContent>
</Card>
@@ -427,7 +428,7 @@ export default function CreatePage() {
</div>
</div>
</div>
<div className="grid grid-cols-2 gap-4">
<Select
label="Corner Style"
@@ -438,7 +439,7 @@ export default function CreatePage() {
{ value: 'rounded', label: 'Rounded' },
]}
/>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
Size: {size}px
@@ -453,7 +454,7 @@ export default function CreatePage() {
/>
</div>
</div>
<div className="flex items-center justify-between">
<Badge variant={hasGoodContrast ? 'success' : 'warning'}>
{hasGoodContrast ? 'Good contrast' : 'Low contrast'}
@@ -490,11 +491,11 @@ export default function CreatePage() {
</div>
)}
</div>
<div className="space-y-3">
<Button
variant="outline"
className="w-full"
<Button
variant="outline"
className="w-full"
type="button"
onClick={() => {
const svg = document.querySelector('#create-qr-preview svg');
@@ -512,9 +513,9 @@ export default function CreatePage() {
>
Download SVG
</Button>
<Button
variant="outline"
className="w-full"
<Button
variant="outline"
className="w-full"
type="button"
onClick={() => {
const svg = document.querySelector('#create-qr-preview svg');
@@ -525,7 +526,7 @@ export default function CreatePage() {
const svgData = new XMLSerializer().serializeToString(svg);
const blob = new Blob([svgData], { type: 'image/svg+xml' });
const url = URL.createObjectURL(blob);
img.onload = () => {
canvas.width = 200;
canvas.height = 200;