Primer commit

This commit is contained in:
2026-08-03 18:01:15 +02:00
commit 99b9fed37f
121 changed files with 18222 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
<script setup>
import GuestLayout from '@/Layouts/GuestLayout.vue';
import InputError from '@/Components/InputError.vue';
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, useForm } from '@inertiajs/vue3';
const form = useForm({
password: '',
});
const submit = () => {
form.post(route('password.confirm'), {
onFinish: () => form.reset(),
});
};
</script>
<template>
<GuestLayout>
<Head title="Confirm Password" />
<div class="mb-3 text-muted">
This is a secure area of the application. Please confirm your password before continuing.
</div>
<form @submit.prevent="submit">
<div class="mb-3">
<InputLabel for="password" value="Password" />
<TextInput
id="password"
type="password"
class="mt-1"
v-model="form.password"
required
autocomplete="current-password"
autofocus
/>
<InputError :message="form.errors.password" />
</div>
<div class="d-flex justify-content-end">
<PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing">
Confirm
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template>

View File

@@ -0,0 +1,60 @@
<script setup>
import GuestLayout from '@/Layouts/GuestLayout.vue';
import InputError from '@/Components/InputError.vue';
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, useForm } from '@inertiajs/vue3';
defineProps({
status: {
type: String,
},
});
const form = useForm({
email: '',
});
const submit = () => {
form.post(route('password.email'));
};
</script>
<template>
<GuestLayout>
<Head title="Forgot Password" />
<div class="mb-3 text-muted">
Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.
</div>
<div v-if="status" class="alert alert-success mb-3">
{{ status }}
</div>
<form @submit.prevent="submit">
<div class="mb-3">
<InputLabel for="email" value="Email" />
<TextInput
id="email"
type="email"
class="mt-1"
v-model="form.email"
required
autofocus
autocomplete="username"
/>
<InputError :message="form.errors.email" />
</div>
<div class="d-flex justify-content-end">
<PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing">
Email Password Reset Link
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template>

View File

@@ -0,0 +1,92 @@
<script setup>
import Checkbox from '@/Components/Checkbox.vue';
import GuestLayout from '@/Layouts/GuestLayout.vue';
import InputError from '@/Components/InputError.vue';
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, Link, useForm } from '@inertiajs/vue3';
defineProps({
canResetPassword: {
type: Boolean,
},
status: {
type: String,
},
});
const form = useForm({
email: '',
password: '',
remember: false,
});
const submit = () => {
form.post(route('login'), {
onFinish: () => form.reset('password'),
});
};
</script>
<template>
<GuestLayout>
<Head title="Log in" />
<div v-if="status" class="alert alert-success mb-3">
{{ status }}
</div>
<form @submit.prevent="submit">
<div class="mb-3">
<InputLabel for="email" value="Email" />
<TextInput
id="email"
type="email"
class="mt-1"
v-model="form.email"
required
autofocus
autocomplete="username"
/>
<InputError :message="form.errors.email" />
</div>
<div class="mb-3">
<InputLabel for="password" value="Password" />
<TextInput
id="password"
type="password"
class="mt-1"
v-model="form.password"
required
autocomplete="current-password"
/>
<InputError :message="form.errors.password" />
</div>
<div class="mb-3 form-check">
<Checkbox name="remember" v-model:checked="form.remember" />
<label class="form-check-label ms-2">Remember me</label>
</div>
<div class="d-flex align-items-center justify-content-end gap-2">
<Link
v-if="canResetPassword"
:href="route('password.request')"
class="text-decoration-underline small"
>
Forgot your password?
</Link>
<PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing">
Log in
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template>

View File

@@ -0,0 +1,100 @@
<script setup>
import GuestLayout from '@/Layouts/GuestLayout.vue';
import InputError from '@/Components/InputError.vue';
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, Link, useForm } from '@inertiajs/vue3';
const form = useForm({
name: '',
email: '',
password: '',
password_confirmation: '',
});
const submit = () => {
form.post(route('register'), {
onFinish: () => form.reset('password', 'password_confirmation'),
});
};
</script>
<template>
<GuestLayout>
<Head title="Register" />
<form @submit.prevent="submit">
<div class="mb-3">
<InputLabel for="name" value="Name" />
<TextInput
id="name"
type="text"
class="mt-1"
v-model="form.name"
required
autofocus
autocomplete="name"
/>
<InputError :message="form.errors.name" />
</div>
<div class="mb-3">
<InputLabel for="email" value="Email" />
<TextInput
id="email"
type="email"
class="mt-1"
v-model="form.email"
required
autocomplete="username"
/>
<InputError :message="form.errors.email" />
</div>
<div class="mb-3">
<InputLabel for="password" value="Password" />
<TextInput
id="password"
type="password"
class="mt-1"
v-model="form.password"
required
autocomplete="new-password"
/>
<InputError :message="form.errors.password" />
</div>
<div class="mb-3">
<InputLabel for="password_confirmation" value="Confirm Password" />
<TextInput
id="password_confirmation"
type="password"
class="mt-1"
v-model="form.password_confirmation"
required
autocomplete="new-password"
/>
<InputError :message="form.errors.password_confirmation" />
</div>
<div class="d-flex align-items-center justify-content-end gap-2">
<Link :href="route('login')" class="text-decoration-underline small">
Already registered?
</Link>
<PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing">
Register
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template>

View File

@@ -0,0 +1,92 @@
<script setup>
import GuestLayout from '@/Layouts/GuestLayout.vue';
import InputError from '@/Components/InputError.vue';
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { Head, useForm } from '@inertiajs/vue3';
const props = defineProps({
email: {
type: String,
required: true,
},
token: {
type: String,
required: true,
},
});
const form = useForm({
token: props.token,
email: props.email,
password: '',
password_confirmation: '',
});
const submit = () => {
form.post(route('password.store'), {
onFinish: () => form.reset('password', 'password_confirmation'),
});
};
</script>
<template>
<GuestLayout>
<Head title="Reset Password" />
<form @submit.prevent="submit">
<div class="mb-3">
<InputLabel for="email" value="Email" />
<TextInput
id="email"
type="email"
class="mt-1"
v-model="form.email"
required
autofocus
autocomplete="username"
/>
<InputError :message="form.errors.email" />
</div>
<div class="mb-3">
<InputLabel for="password" value="Password" />
<TextInput
id="password"
type="password"
class="mt-1"
v-model="form.password"
required
autocomplete="new-password"
/>
<InputError :message="form.errors.password" />
</div>
<div class="mb-3">
<InputLabel for="password_confirmation" value="Confirm Password" />
<TextInput
id="password_confirmation"
type="password"
class="mt-1"
v-model="form.password_confirmation"
required
autocomplete="new-password"
/>
<InputError :message="form.errors.password_confirmation" />
</div>
<div class="d-flex justify-content-end">
<PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing">
Reset Password
</PrimaryButton>
</div>
</form>
</GuestLayout>
</template>

View File

@@ -0,0 +1,48 @@
<script setup>
import { computed } from 'vue';
import GuestLayout from '@/Layouts/GuestLayout.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import { Head, Link, useForm } from '@inertiajs/vue3';
const props = defineProps({
status: {
type: String,
},
});
const form = useForm({});
const submit = () => {
form.post(route('verification.send'));
};
const verificationLinkSent = computed(
() => props.status === 'verification-link-sent',
);
</script>
<template>
<GuestLayout>
<Head title="Email Verification" />
<div class="mb-3 text-muted">
Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.
</div>
<div class="alert alert-success mb-3" v-if="verificationLinkSent">
A new verification link has been sent to the email address you provided during registration.
</div>
<form @submit.prevent="submit">
<div class="d-flex align-items-center justify-content-between gap-2">
<PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing">
Resend Verification Email
</PrimaryButton>
<Link :href="route('logout')" method="post" as="button" class="btn btn-link text-decoration-underline small">
Log Out
</Link>
</div>
</form>
</GuestLayout>
</template>