Compare commits
10 Commits
9219e923a1
...
528d5b289c
| Author | SHA1 | Date |
|---|---|---|
|
|
528d5b289c | |
|
|
65f070ecaf | |
|
|
077f47a7d2 | |
|
|
3244685cb1 | |
|
|
238a5f2e00 | |
|
|
d38a9c9c2d | |
|
|
a355796d3e | |
|
|
a9bc05a504 | |
|
|
362e9e804a | |
|
|
63adc61b4c |
|
|
@ -24,6 +24,10 @@ public function register(): void
|
|||
public function boot(): void
|
||||
{
|
||||
$this->configureDefaults();
|
||||
|
||||
if (app()->isProduction()) {
|
||||
\Illuminate\Support\Facades\URL::forceScheme('https');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
* Hapus constraint unique pada kolom email agar 1 email bisa dipakai banyak orang.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('user_profiles', function (Blueprint $table) {
|
||||
$table->dropUnique('user_profiles_email_unique');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('user_profiles', function (Blueprint $table) {
|
||||
$table->unique('email');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -16,19 +16,18 @@ nixPkgs = [
|
|||
|
||||
[phases.install]
|
||||
cmds = [
|
||||
"php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\"",
|
||||
"php composer-setup.php --install-dir=/usr/local/bin --filename=composer",
|
||||
"php -r \"unlink('composer-setup.php');\"",
|
||||
"composer install --no-dev --optimize-autoloader --no-interaction",
|
||||
"curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && php /usr/local/bin/composer install --no-dev --optimize-autoloader --no-interaction",
|
||||
"npm ci"
|
||||
]
|
||||
|
||||
[phases.build]
|
||||
cmds = [
|
||||
"php artisan wayfinder:generate",
|
||||
"npm run build",
|
||||
"php artisan config:cache",
|
||||
"php artisan route:cache",
|
||||
"php artisan view:cache"
|
||||
"php artisan view:cache",
|
||||
"php artisan storage:link"
|
||||
]
|
||||
|
||||
[start]
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ .form-select {
|
|||
font-weight: 300;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
transition: all var(--transition);
|
||||
transition: color var(--transition), border-color var(--transition), background var(--transition);
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
|
|
@ -264,6 +264,12 @@ .form-select {
|
|||
padding-right: 36px;
|
||||
}
|
||||
|
||||
/* When a real value has been selected */
|
||||
.form-select.is-selected {
|
||||
color: var(--text-primary);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.form-select:focus {
|
||||
border-color: rgba(255, 255, 255, 0.2);
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
|
|
|
|||
|
|
@ -652,4 +652,11 @@ .image-section img{
|
|||
.image-section img:hover{
|
||||
transform: scale(1.03) translateY(-4px);
|
||||
filter: drop-shadow(0 16px 40px rgba(88,166,255,0.2));
|
||||
}
|
||||
|
||||
/* ===== VALIDATION ERROR STATE ===== */
|
||||
.form-input.is-invalid,
|
||||
.form-select.is-invalid {
|
||||
border-color: rgba(248, 81, 73, 0.7) !important;
|
||||
box-shadow: 0 0 0 3px rgba(248, 81, 73, 0.12);
|
||||
}
|
||||
|
|
@ -174,7 +174,10 @@
|
|||
</svg>
|
||||
Nama
|
||||
</label>
|
||||
<input type="text" class="form-input" id="inputNama" name="name" placeholder="Nama lengkap" required>
|
||||
<input type="text" class="form-input @error('name') is-invalid @enderror" id="inputNama" name="name" placeholder="Nama lengkap" value="{{ old('name') }}" required>
|
||||
@error('name')
|
||||
<small style="color:#f87171;font-size:0.78rem;margin-top:4px;display:block;">⚠ {{ $message }}</small>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Email -->
|
||||
|
|
@ -186,7 +189,10 @@
|
|||
</svg>
|
||||
Email
|
||||
</label>
|
||||
<input type="email" class="form-input" id="inputEmail" name="email" placeholder="Email" required>
|
||||
<input type="email" class="form-input @error('email') is-invalid @enderror" id="inputEmail" name="email" placeholder="Email" value="{{ old('email') }}" required>
|
||||
@error('email')
|
||||
<small style="color:#f87171;font-size:0.78rem;margin-top:4px;display:block;">⚠ {{ $message }}</small>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<!-- Jenis Kelamin -->
|
||||
|
|
@ -258,8 +264,11 @@
|
|||
</svg>
|
||||
Register Voice Keyword
|
||||
</label>
|
||||
<input type="text" class="form-input" id="inputVoiceKeyword" name="voice_keyword"
|
||||
placeholder="Masukkan kata kunci suara (contoh: buka pintu)" required>
|
||||
<input type="text" class="form-input @error('voice_keyword') is-invalid @enderror" id="inputVoiceKeyword" name="voice_keyword"
|
||||
placeholder="Masukkan kata kunci suara (contoh: buka pintu)" value="{{ old('voice_keyword') }}" required>
|
||||
@error('voice_keyword')
|
||||
<small style="color:#f87171;font-size:0.78rem;margin-top:4px;display:block;">⚠ {{ $message }}</small>
|
||||
@enderror
|
||||
<small style="color: var(--text-muted, #8892a4); font-size: 0.75rem; margin-top: 4px; display:block;">
|
||||
🎙️ Kata kunci ini akan digunakan untuk membuka pintu dengan suara
|
||||
</small>
|
||||
|
|
@ -340,6 +349,19 @@ function toggleTheme() {
|
|||
const mobileBtn = document.getElementById('mobileThemeBtn');
|
||||
if (btn) btn.addEventListener('click', toggleTheme);
|
||||
if (mobileBtn) mobileBtn.addEventListener('click', toggleTheme);
|
||||
|
||||
// Toggle warna select: abu-abu saat placeholder, putih saat sudah dipilih
|
||||
document.querySelectorAll('.form-select').forEach(function(sel) {
|
||||
function checkSelected() {
|
||||
if (sel.value !== '') {
|
||||
sel.classList.add('is-selected');
|
||||
} else {
|
||||
sel.classList.remove('is-selected');
|
||||
}
|
||||
}
|
||||
sel.addEventListener('change', checkSelected);
|
||||
checkSelected(); // cek kondisi awal (misal saat back/reload)
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -15,12 +15,14 @@
|
|||
Route::get('/register', [RegisteredUserController::class, 'create'])
|
||||
->name('register');
|
||||
|
||||
Route::post('/register', [RegisteredUserController::class, 'store']);
|
||||
Route::post('/register', [RegisteredUserController::class, 'store'])
|
||||
->name('register.store');
|
||||
|
||||
Route::get('/login', [AuthenticatedSessionController::class, 'create'])
|
||||
->name('login');
|
||||
|
||||
Route::post('/login', [AuthenticatedSessionController::class, 'store']);
|
||||
Route::post('/login', [AuthenticatedSessionController::class, 'store'])
|
||||
->name('login.store');
|
||||
});
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Route::get('/', function () {
|
||||
return redirect()->route('login');
|
||||
});
|
||||
})->name('home');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -26,10 +26,11 @@
|
|||
|
||||
Route::get('/histori', [UserProfileController::class,'histori'])->name('histori');
|
||||
|
||||
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
||||
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
||||
// Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
||||
// Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
// Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
||||
|
||||
});
|
||||
|
||||
require __DIR__.'/auth.php';
|
||||
require __DIR__.'/auth.php';
|
||||
require __DIR__.'/settings.php';
|
||||
Loading…
Reference in New Issue