|
@@ -40,12 +40,12 @@
|
|
|
<form @submit.prevent="handleSubmit" class="space-y-5">
|
|
<form @submit.prevent="handleSubmit" class="space-y-5">
|
|
|
<!-- Email -->
|
|
<!-- Email -->
|
|
|
<div v-if="mode !== 'reset'" class="space-y-2">
|
|
<div v-if="mode !== 'reset'" class="space-y-2">
|
|
|
- <label class="text-xs font-semibold uppercase tracking-wider text-muted-foreground ml-1">{{ t("auth.fields.email") }}</label>
|
|
|
|
|
|
|
+ <label for="email" class="text-xs font-semibold uppercase tracking-wider text-muted-foreground ml-1">{{ t("auth.fields.email") }}</label>
|
|
|
<div class="relative group">
|
|
<div class="relative group">
|
|
|
<div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors">
|
|
<div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors">
|
|
|
<Mail class="w-4 h-4" />
|
|
<Mail class="w-4 h-4" />
|
|
|
</div>
|
|
</div>
|
|
|
- <input v-model="formData.email" type="email" required placeholder="john@example.com"
|
|
|
|
|
|
|
+ <input id="email" v-model="formData.email" type="email" required placeholder="john@example.com"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl pl-11 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl pl-11 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -109,8 +109,8 @@
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="space-y-1.5">
|
|
<div class="space-y-1.5">
|
|
|
- <label class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("upload.shippingAddress") }}</label>
|
|
|
|
|
- <textarea v-model="formData.address" rows="2"
|
|
|
|
|
|
|
+ <label for="shipping-address" class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("upload.shippingAddress") }}</label>
|
|
|
|
|
+ <textarea id="shipping-address" v-model="formData.address" rows="2"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm resize-none" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm resize-none" />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
@@ -118,18 +118,18 @@
|
|
|
<Transition enter-active-class="transition duration-200" enter-from-class="opacity-0 -translate-y-2" enter-to-class="opacity-100 translate-y-0">
|
|
<Transition enter-active-class="transition duration-200" enter-from-class="opacity-0 -translate-y-2" enter-to-class="opacity-100 translate-y-0">
|
|
|
<div v-if="formData.is_company" class="space-y-4 pt-4 border-t border-border/50">
|
|
<div v-if="formData.is_company" class="space-y-4 pt-4 border-t border-border/50">
|
|
|
<div class="space-y-1.5">
|
|
<div class="space-y-1.5">
|
|
|
- <label class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("auth.fields.companyName") }}</label>
|
|
|
|
|
- <input v-model="formData.company_name" type="text" :required="formData.is_company"
|
|
|
|
|
|
|
+ <label for="company-name" class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("auth.fields.companyName") }}</label>
|
|
|
|
|
+ <input id="company-name" v-model="formData.company_name" type="text" :required="formData.is_company"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="space-y-1.5">
|
|
<div class="space-y-1.5">
|
|
|
- <label class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("auth.fields.companyPIB") }}</label>
|
|
|
|
|
- <input v-model="formData.company_pib" type="text" :required="formData.is_company"
|
|
|
|
|
|
|
+ <label for="company-pib" class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("auth.fields.companyPIB") }}</label>
|
|
|
|
|
+ <input id="company-pib" v-model="formData.company_pib" type="text" :required="formData.is_company"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="space-y-1.5">
|
|
<div class="space-y-1.5">
|
|
|
- <label class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("auth.fields.companyAddress") }}</label>
|
|
|
|
|
- <textarea v-model="formData.company_address" rows="2"
|
|
|
|
|
|
|
+ <label for="company-address" class="text-[10px] font-bold uppercase tracking-widest text-muted-foreground/60 ml-1">{{ t("auth.fields.companyAddress") }}</label>
|
|
|
|
|
+ <textarea id="company-address" v-model="formData.company_address" rows="2"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm resize-none" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl px-4 py-2.5 focus:outline-none focus:ring-1 focus:ring-primary/30 text-sm resize-none" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -140,9 +140,7 @@
|
|
|
<div v-if="mode !== 'forgot'" class="space-y-5">
|
|
<div v-if="mode !== 'forgot'" class="space-y-5">
|
|
|
<div class="space-y-2 pt-2">
|
|
<div class="space-y-2 pt-2">
|
|
|
<div class="flex justify-between items-center px-1">
|
|
<div class="flex justify-between items-center px-1">
|
|
|
- <label class="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
|
|
|
- {{ mode === "reset" ? t("auth.fields.newPassword") : t("auth.fields.password") }}
|
|
|
|
|
- </label>
|
|
|
|
|
|
|
+ <label for="password" class="text-xs font-semibold uppercase tracking-wider text-muted-foreground">{{ mode === 'reset' ? t("auth.fields.newPassword") : t("auth.fields.password") }}</label>
|
|
|
<button v-if="mode === 'login'" type="button" @click="mode = 'forgot'"
|
|
<button v-if="mode === 'login'" type="button" @click="mode = 'forgot'"
|
|
|
class="text-[11px] text-primary hover:underline font-medium">{{ t("auth.forgot.link") }}</button>
|
|
class="text-[11px] text-primary hover:underline font-medium">{{ t("auth.forgot.link") }}</button>
|
|
|
</div>
|
|
</div>
|
|
@@ -150,18 +148,19 @@
|
|
|
<div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors">
|
|
<div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors">
|
|
|
<Lock class="w-4 h-4" />
|
|
<Lock class="w-4 h-4" />
|
|
|
</div>
|
|
</div>
|
|
|
- <input v-model="formData.password" type="password" required placeholder="••••••••"
|
|
|
|
|
|
|
+ <input id="password" v-model="formData.password" type="password" required placeholder="••••••••"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl pl-11 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl pl-11 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <div v-if="mode === 'register' || mode === 'reset'" class="space-y-2">
|
|
|
|
|
- <label class="text-xs font-semibold uppercase tracking-wider text-muted-foreground ml-1">{{ t("auth.fields.confirmPassword") }}</label>
|
|
|
|
|
|
|
+ <!-- Confirm Password (Register/Reset only) -->
|
|
|
|
|
+ <div v-if="mode === 'register' || mode === 'reset'" class="space-y-2 animate-in fade-in slide-in-from-top-2 duration-300">
|
|
|
|
|
+ <label for="confirm-password" class="text-xs font-semibold uppercase tracking-wider text-muted-foreground ml-1">{{ t("auth.fields.confirmPassword") }}</label>
|
|
|
<div class="relative group">
|
|
<div class="relative group">
|
|
|
<div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors">
|
|
<div class="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors">
|
|
|
<ShieldCheck class="w-4 h-4" />
|
|
<ShieldCheck class="w-4 h-4" />
|
|
|
</div>
|
|
</div>
|
|
|
- <input v-model="formData.confirmPassword" type="password" required placeholder="••••••••"
|
|
|
|
|
|
|
+ <input id="confirm-password" v-model="formData.confirmPassword" type="password" required placeholder="••••••••"
|
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl pl-11 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm" />
|
|
class="w-full bg-background/50 border border-border/50 rounded-xl pl-11 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all text-sm" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|