feat: complete install.sh and run.sh scripts with dynamic health check and build assets sync
This commit is contained in:
+213
-95
@@ -1,106 +1,162 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# --- Color Definitions for Premium Look ---
|
# --- Color Definitions for Premium Terminal Styling ---
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
CYAN='\033[0;36m'
|
CYAN='\033[0;36m'
|
||||||
WHITE='\033[1;37m'
|
MAGENTA='\033[0;35m'
|
||||||
BOLD='\033[1m'
|
BOLD='\033[1m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
echo -e "${CYAN}======================================================${NC}"
|
# Helper Functions for Clean Output
|
||||||
echo -e "${GREEN}${BOLD} ⚡ Biiproject Kit v2 — Professional Installer ⚡ ${NC}"
|
log_info() {
|
||||||
echo -e "${CYAN}======================================================${NC}"
|
echo -e " ${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
# 1. Pre-flight Checks (Docker & Daemon status)
|
log_success() {
|
||||||
echo -e "${CYAN}[1/7] Verifying Docker environment...${NC}"
|
echo -e " ${GREEN}[SUCCESS]${NC} ✔ $1"
|
||||||
if ! command -v docker &> /dev/null; then
|
}
|
||||||
echo -e " ${RED}❌ Error: Docker is not installed on this system.${NC}"
|
|
||||||
echo -e " ${YELLOW}👉 Please install Docker before running the installer.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! docker info &> /dev/null; then
|
log_warning() {
|
||||||
echo -e " ${RED}❌ Error: Docker daemon is not running.${NC}"
|
echo -e " ${YELLOW}[WARNING]${NC} ⚠ $1"
|
||||||
echo -e " ${YELLOW}👉 Please start Docker Desktop or the Docker service and try again.${NC}"
|
}
|
||||||
exit 1
|
|
||||||
fi
|
log_error() {
|
||||||
echo -e " ${GREEN}✔ Docker is installed and running perfectly.${NC}"
|
echo -e " ${RED}[ERROR]${NC} ✘ $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_screen() {
|
||||||
|
clear 2>/dev/null || printf "\033c"
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_screen
|
||||||
|
|
||||||
|
# Premium Welcome Header
|
||||||
|
echo -e "${CYAN}======================================================================${NC}"
|
||||||
|
echo -e "${BOLD}${MAGENTA} 🛠️ BIIPROJECT KIT V2 - CORE APPLICATION INSTALLER 🛠️ ${NC}"
|
||||||
|
echo -e "${CYAN}======================================================================${NC}"
|
||||||
|
echo -e " Selamat datang di asisten instalasi otomatis Biiproject Kit."
|
||||||
|
echo -e " Skrip ini akan memvalidasi lingkungan Anda dan menginstal seluruh"
|
||||||
|
echo -e " kebutuhan aplikasi agar siap dijalankan."
|
||||||
|
echo -e "${CYAN}======================================================================${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 2. Check and Create Environment File (.env)
|
# 1. PRE-FLIGHT SYSTEM CHECKS
|
||||||
echo -e "${CYAN}[2/7] Preparing configuration environment (.env)...${NC}"
|
echo -e "${BOLD}${BLUE}[1/7] Memeriksa Kebutuhan Sistem (Pre-flight Checks)...${NC}"
|
||||||
|
|
||||||
|
# Check Docker Installation
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
log_error "Docker tidak ditemukan pada sistem ini."
|
||||||
|
log_warning "Harap instal Docker terlebih dahulu sebelum melanjutkan."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
log_success "Docker terinstal."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check Docker Daemon Status
|
||||||
|
if ! docker info &> /dev/null; then
|
||||||
|
log_error "Docker daemon tidak berjalan."
|
||||||
|
log_warning "Harap jalankan Docker service Anda (misal: sudo systemctl start docker)."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
log_success "Docker daemon aktif dan berjalan."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check Docker Compose Installation
|
||||||
|
if ! docker compose version &> /dev/null; then
|
||||||
|
log_warning "Docker Compose v2 tidak terdeteksi. Mencoba memeriksa 'docker-compose' lama..."
|
||||||
|
if ! command -v docker-compose &> /dev/null; then
|
||||||
|
log_error "Docker Compose tidak ditemukan pada sistem."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
log_success "Docker-compose (v1) terinstal."
|
||||||
|
DOCKER_COMPOSE_CMD="docker-compose"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_success "Docker Compose v2 terinstal."
|
||||||
|
DOCKER_COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. ENVIRONMENT CONFIGURATION
|
||||||
|
echo -e "${BOLD}${BLUE}[2/7] Mengonfigurasi File Environment (.env)...${NC}"
|
||||||
if [ ! -f .env ]; then
|
if [ ! -f .env ]; then
|
||||||
if [ -f .env.example ]; then
|
if [ -f .env.example ]; then
|
||||||
|
log_info "Membuat file .env baru dari .env.example..."
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
echo -e " ${GREEN}✔ Created .env from .env.example template.${NC}"
|
log_success "File .env berhasil dibuat."
|
||||||
else
|
else
|
||||||
echo -e " ${RED}❌ Error: .env.example template is missing!${NC}"
|
log_error "File .env.example tidak ditemukan! Tidak dapat membuat file .env."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e " ${GREEN}✔ Configuration file .env is already present.${NC}"
|
log_info "File .env sudah ada. Menggunakan konfigurasi yang ada."
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 3. Clean up conflicting containers
|
# Parse App Port from .env
|
||||||
echo -e "${CYAN}[3/7] Cleaning up existing container conflicts...${NC}"
|
APP_PORT=$(grep "^APP_PORT=" .env | cut -d'=' -f2- | tr -d '"'\''')
|
||||||
# Safely stop and remove containers by name to prevent conflict issues on port mapping
|
APP_PORT=${APP_PORT:-8000}
|
||||||
CONFLICT_CONTAINERS=("bii-kit-web" "bii-kit-pgsql" "bii-kit-redis")
|
|
||||||
for container in "${CONFLICT_CONTAINERS[@]}"; do
|
# 3. VENDOR & COMPOSER DEPENDENCIES
|
||||||
if [ ! -z "$(docker ps -a -q -f name=^/${container}$ 2>/dev/null)" ]; then
|
echo -e "${BOLD}${BLUE}[3/7] Menginstal Dependensi PHP (Composer)...${NC}"
|
||||||
echo -ne " ${YELLOW}Removing old container $container...${NC}"
|
if [ ! -d vendor ]; then
|
||||||
docker rm -f "$container" &>/dev/null
|
log_info "Direktori 'vendor' tidak ditemukan. Mengunduh dependensi via PHP-Composer container..."
|
||||||
echo -e "\r ${GREEN}✔ Container $container successfully cleared. ${NC}"
|
|
||||||
|
docker run --rm \
|
||||||
|
-u "$(id -u):$(id -g)" \
|
||||||
|
-v "$(pwd):/var/www/html" \
|
||||||
|
-w /var/www/html \
|
||||||
|
laravelsail/php83-composer:latest \
|
||||||
|
composer install --ignore-platform-reqs --no-interaction --prefer-dist
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
log_error "Gagal menginstal dependensi Composer. Silakan cek koneksi internet Anda."
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
log_success "Dependensi Composer berhasil diinstal."
|
||||||
echo -e " ${GREEN}✔ Conflict scanning complete.${NC}"
|
else
|
||||||
|
log_info "Direktori 'vendor' sudah ada. Melewati instalasi Composer."
|
||||||
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 4. Zero-Dependency Host Bootstrapping: Composer Install
|
# 4. SPIN UP DOCKER CONTAINERS
|
||||||
echo -e "${CYAN}[4/7] Installing PHP dependencies via Composer...${NC}"
|
echo -e "${BOLD}${BLUE}[4/7] Memulai Container Docker (Database, Redis, Web)...${NC}"
|
||||||
echo -e " ${YELLOW}⚙ Bootstrapping Composer packages inside lightweight PHP container...${NC}"
|
log_info "Menjalankan '$DOCKER_COMPOSE_CMD up -d'..."
|
||||||
docker run --rm \
|
$DOCKER_COMPOSE_CMD up -d
|
||||||
-u "$(id -u):$(id -g)" \
|
|
||||||
-v "$(pwd):/var/www/html" \
|
|
||||||
-w /var/www/html \
|
|
||||||
laravelsail/php83-composer:latest \
|
|
||||||
composer install --ignore-platform-reqs
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo -e " ${RED}❌ Error: Composer dependency installation failed.${NC}"
|
log_error "Gagal menjalankan Docker container. Periksa file docker-compose.yml."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo -e " ${GREEN}✔ Composer dependencies successfully installed.${NC}"
|
log_success "Docker containers berhasil dijalankan."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 5. Booting Docker Services for DB Migration
|
# Resolve container names dynamically
|
||||||
echo -e "${CYAN}[5/7] Spin up database & Redis services...${NC}"
|
DB_CONTAINER="bii-pgsql"
|
||||||
docker compose up pgsql redis -d
|
REDIS_CONTAINER="bii-redis"
|
||||||
|
WEB_CONTAINER="laravel.test"
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
# 5. WAITING FOR SERVICES HEALTHY (Postgres & Redis)
|
||||||
echo -e " ${RED}❌ Error: Failed to boot Postgres & Redis services.${NC}"
|
echo -e "${BOLD}${BLUE}[5/7] Menunggu Database & Redis Siap (Healthcheck)...${NC}"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
DB_CONTAINER="bii-kit-pgsql"
|
echo -ne " ${YELLOW}Memeriksa PostgreSQL Database ($DB_CONTAINER)...${NC}"
|
||||||
echo -ne " ${YELLOW}Waiting for PostgreSQL ($DB_CONTAINER) to become healthy...${NC}"
|
|
||||||
RETRIES=0
|
RETRIES=0
|
||||||
MAX_RETRIES=40
|
MAX_RETRIES=40
|
||||||
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
||||||
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$DB_CONTAINER" 2>/dev/null)
|
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$DB_CONTAINER" 2>/dev/null)
|
||||||
if [ "$STATUS" = "healthy" ]; then
|
if [ "$STATUS" = "healthy" ]; then
|
||||||
echo -e "\r ${GREEN}✔ PostgreSQL is healthy and ready to accept connections! ${NC}"
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ PostgreSQL siap menerima koneksi! "
|
||||||
break
|
break
|
||||||
elif [ "$STATUS" = "unhealthy" ]; then
|
elif [ "$STATUS" = "unhealthy" ]; then
|
||||||
echo -e "\r ${RED}⚠ PostgreSQL health check failed. Proceeding anyway...${NC}"
|
echo -e "\r ${YELLOW}[PERINGATAN]${NC} ⚠ Healthcheck PGSQL melaporkan error. Melanjutkan..."
|
||||||
break
|
break
|
||||||
elif [ -z "$STATUS" ]; then
|
elif [ -z "$STATUS" ]; then
|
||||||
RUNNING=$(docker inspect --format='{{.State.Running}}' "$DB_CONTAINER" 2>/dev/null)
|
RUNNING=$(docker inspect --format='{{.State.Running}}' "$DB_CONTAINER" 2>/dev/null)
|
||||||
if [ "$RUNNING" = "true" ]; then
|
if [ "$RUNNING" = "true" ]; then
|
||||||
echo -e "\r ${GREEN}✔ PostgreSQL container is running. ${NC}"
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ PostgreSQL running (tanpa healthcheck status)."
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -108,56 +164,118 @@ while [ $RETRIES -lt $MAX_RETRIES ]; do
|
|||||||
sleep 1.5
|
sleep 1.5
|
||||||
RETRIES=$((RETRIES + 1))
|
RETRIES=$((RETRIES + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo -ne " ${YELLOW}Memeriksa Redis Cache ($REDIS_CONTAINER)...${NC}"
|
||||||
|
RETRIES=0
|
||||||
|
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
||||||
|
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$REDIS_CONTAINER" 2>/dev/null)
|
||||||
|
if [ "$STATUS" = "healthy" ]; then
|
||||||
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ Redis siap menerima koneksi! "
|
||||||
|
break
|
||||||
|
elif [ "$STATUS" = "unhealthy" ]; then
|
||||||
|
echo -e "\r ${YELLOW}[PERINGATAN]${NC} ⚠ Healthcheck Redis melaporkan error. Melanjutkan..."
|
||||||
|
break
|
||||||
|
elif [ -z "$STATUS" ]; then
|
||||||
|
RUNNING=$(docker inspect --format='{{.State.Running}}' "$REDIS_CONTAINER" 2>/dev/null)
|
||||||
|
if [ "$RUNNING" = "true" ]; then
|
||||||
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ Redis running (tanpa healthcheck status)."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo -n "."
|
||||||
|
sleep 1.5
|
||||||
|
RETRIES=$((RETRIES + 1))
|
||||||
|
done
|
||||||
|
sleep 2
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 6. Initialize Database & Application Keys
|
# 6. INITIALIZING APPLICATION (Key, Database Migrate, NPM)
|
||||||
echo -e "${CYAN}[6/7] Initializing keys and database seeds...${NC}"
|
echo -e "${BOLD}${BLUE}[6/7] Menginisialisasi Database & Aset Aplikasi...${NC}"
|
||||||
|
|
||||||
# Start sails application container in background temporarily to execute artisan commands
|
# Secure Permissions First
|
||||||
docker compose up laravel.test -d
|
log_info "Mengonfigurasi hak akses file di dalam container..."
|
||||||
|
$DOCKER_COMPOSE_CMD exec -u root laravel.test chown -R sail:sail /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
||||||
|
$DOCKER_COMPOSE_CMD exec -u root laravel.test chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
||||||
|
|
||||||
# Secure directories owner & permissions
|
# Generate Key
|
||||||
echo -e " ${YELLOW}Securing workspace file permissions...${NC}"
|
|
||||||
docker compose exec -u root laravel.test chown -R sail:sail /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
|
||||||
docker compose exec -u root laravel.test chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
|
||||||
|
|
||||||
# Generate APP_KEY
|
|
||||||
APP_KEY_VAL=$(grep "^APP_KEY=" .env | cut -d'=' -f2- | tr -d '"'\''')
|
APP_KEY_VAL=$(grep "^APP_KEY=" .env | cut -d'=' -f2- | tr -d '"'\''')
|
||||||
if [ -z "$APP_KEY_VAL" ] || [ "$APP_KEY_VAL" = "base64:" ] || [ "$APP_KEY_VAL" = "SomeRandomString" ]; then
|
if [ -z "$APP_KEY_VAL" ] || [ "$APP_KEY_VAL" = "base64:" ] || [ "$APP_KEY_VAL" = "SomeRandomString" ]; then
|
||||||
echo -e " ${YELLOW}⚙ Generating application encryption key...${NC}"
|
log_info "Menghasilkan unique application key..."
|
||||||
docker compose exec -u sail laravel.test php artisan key:generate
|
$DOCKER_COMPOSE_CMD exec -u sail laravel.test php artisan key:generate
|
||||||
|
else
|
||||||
|
log_info "Application key sudah diatur."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run migrations and seeders
|
# Migration & Seed
|
||||||
echo -e " ${YELLOW}⚙ Initializing database schemas & Spatie RBAC tables...${NC}"
|
log_info "Menjalankan migrasi database dan default seeders..."
|
||||||
docker compose exec -u sail laravel.test php artisan migrate:fresh --seed
|
$DOCKER_COMPOSE_CMD exec -u sail laravel.test php artisan migrate:fresh --seed
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_success "Database berhasil di-migrate dan di-seed."
|
||||||
|
else
|
||||||
|
log_error "Gagal melakukan migrasi database."
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate Passport OAuth2 Keys
|
# Link Storage
|
||||||
echo -e " ${YELLOW}⚙ Creating Passport OAuth2 server authentication client keys...${NC}"
|
log_info "Membuat symbolic link untuk storage..."
|
||||||
docker compose exec -u sail laravel.test php artisan passport:keys --force
|
$DOCKER_COMPOSE_CMD exec -u sail laravel.test php artisan storage:link --quiet 2>/dev/null
|
||||||
docker compose exec -u sail laravel.test php artisan passport:client --personal --no-interaction
|
log_success "Storage link berhasil terhubung."
|
||||||
echo -e " ${GREEN}✔ Database and keys successfully initialized.${NC}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 7. Compiling Frontend assets
|
# Install NPM Packages
|
||||||
echo -e "${CYAN}[7/7] Installing and compiling React Frontend...${NC}"
|
log_info "Memasang dependensi NodeJS (NPM)..."
|
||||||
echo -e " ${YELLOW}⚙ Installing Node modules (NPM)...${NC}"
|
if [ ! -d node_modules ]; then
|
||||||
docker compose exec -u sail laravel.test npm install
|
$DOCKER_COMPOSE_CMD exec -u sail laravel.test npm install
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_success "Dependensi NodeJS berhasil dipasang."
|
||||||
|
else
|
||||||
|
log_warning "Gagal memasang dependensi NodeJS."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_info "Folder 'node_modules' sudah ada. Melewati instalasi NPM."
|
||||||
|
fi
|
||||||
|
|
||||||
echo -e " ${YELLOW}⚙ Compiling production web bundles (Vite)...${NC}"
|
# Build Production Assets
|
||||||
docker compose exec -u sail laravel.test npm run build
|
log_info "Mengompilasi aset frontend (production build)..."
|
||||||
|
$DOCKER_COMPOSE_CMD exec -u sail laravel.test npm run build
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_success "Frontend assets berhasil dikompilasi."
|
||||||
|
else
|
||||||
|
log_warning "Gagal melakukan build frontend assets."
|
||||||
|
fi
|
||||||
|
|
||||||
# Storage Symlink
|
# Clean up permissions again in case npm install created any root-owned folders
|
||||||
docker compose exec -u sail laravel.test php artisan storage:link &>/dev/null
|
$DOCKER_COMPOSE_CMD exec -u root laravel.test chown -R sail:sail /var/www/html/node_modules /var/www/html/package-lock.json 2>/dev/null
|
||||||
|
|
||||||
# Final permission secure
|
|
||||||
docker compose exec -u root laravel.test chown -R sail:sail /var/www/html/node_modules /var/www/html/package-lock.json 2>/dev/null
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${CYAN}=================================================================${NC}"
|
|
||||||
echo -e " 🎉 ${GREEN}${BOLD}Installation Complete! biiproject-kit v2 is ready!${NC} 🎉"
|
# 7. PERMISSIONS & FINISHING
|
||||||
echo -e "${CYAN}=================================================================${NC}"
|
echo -e "${BOLD}${BLUE}[7/7] Finishing & Finalizing...${NC}"
|
||||||
echo -e " ${WHITE}You can now run the application stack anytime by executing:${NC}"
|
chmod +x artisan sail run.sh 2>/dev/null
|
||||||
echo -e " 👉 ${GREEN}${BOLD}./run.sh${NC}"
|
log_success "Hak akses berkas lokal (artisan, sail, run.sh) disesuaikan."
|
||||||
echo -e "${CYAN}=================================================================${NC}"
|
|
||||||
|
clear_screen
|
||||||
|
|
||||||
|
# SUCCESS BOARD
|
||||||
|
echo -e "${GREEN}======================================================================${NC}"
|
||||||
|
echo -e "${BOLD}${GREEN} 🎉 INSTALASI BIIPROJECT KIT BERHASIL DISELESAIKAN! 🎉 ${NC}"
|
||||||
|
echo -e "${GREEN}======================================================================${NC}"
|
||||||
|
echo -e " Aplikasi Anda sekarang siap digunakan!"
|
||||||
|
echo -e ""
|
||||||
|
echo -e " 👉 ${BOLD}URL Aplikasi:${NC} ${CYAN}http://localhost:${APP_PORT}${NC}"
|
||||||
|
echo -e " 👉 ${BOLD}Monitoring Panel:${NC} ${CYAN}http://localhost:${APP_PORT}/system-monitoring${NC}"
|
||||||
|
echo -e " 👉 ${BOLD}Dokumentasi API:${NC} ${CYAN}http://localhost:${APP_PORT}/documentation${NC}"
|
||||||
|
echo -e " 👉 ${BOLD}Layanan Database:${NC} PostgreSQL pada port ${YELLOW}5432${NC}"
|
||||||
|
echo -e " 👉 ${BOLD}Layanan Redis:${NC} Redis pada port ${YELLOW}6379${NC}"
|
||||||
|
echo -e ""
|
||||||
|
echo -e " ========================================================"
|
||||||
|
echo -e " ${BOLD}CARA MENJALANKAN & MENGHENTIKAN APLIKASI:${NC}"
|
||||||
|
echo -e " ========================================================"
|
||||||
|
echo -e " Untuk menjalankan server pengembangan (live reload):"
|
||||||
|
echo -e " ${CYAN}./run.sh${NC}"
|
||||||
|
echo -e ""
|
||||||
|
echo -e " Untuk melihat logs docker secara realtime:"
|
||||||
|
echo -e " ${CYAN}docker compose logs -f${NC}"
|
||||||
|
echo -e ""
|
||||||
|
echo -e " Untuk menghentikan docker container:"
|
||||||
|
echo -e " ${CYAN}docker compose down${NC}"
|
||||||
|
echo -e "${GREEN}======================================================================${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{c as e,o as t,t as n}from"./app-BJ7g6sa8.js";e();var r=n();function i({ability:e,children:n,fallback:i=null}){let{permissions:a}=t().props.auth;return(Array.isArray(e)?e:[e]).some(e=>a.includes(e))?(0,r.jsx)(r.Fragment,{children:n}):(0,r.jsx)(r.Fragment,{children:i})}export{i as t};
|
import{c as e,o as t,t as n}from"./app-CBC6ZGaO.js";e();var r=n();function i({ability:e,children:n,fallback:i=null}){let{permissions:a}=t().props.auth;return(Array.isArray(e)?e:[e]).some(e=>a.includes(e))?(0,r.jsx)(r.Fragment,{children:n}):(0,r.jsx)(r.Fragment,{children:i})}export{i as t};
|
||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
import{a as e,c as t,d as n,n as r,t as i}from"./app-BJ7g6sa8.js";var a=n(t(),1),o=i();function s(){let[t,n]=(0,a.useState)(!1),{data:i,setData:s,post:c,processing:l,errors:u}=e({code:``});return(0,o.jsxs)(`div`,{className:`min-h-screen bg-[#E3EBE8] flex items-center justify-center p-4`,children:[(0,o.jsx)(r,{title:`Two-Factor Authentication`}),(0,o.jsxs)(`div`,{className:`w-full max-w-sm`,children:[(0,o.jsxs)(`div`,{className:`text-center mb-8`,children:[(0,o.jsx)(`div`,{className:`inline-flex items-center justify-center w-14 h-14 rounded-2xl bg-[#3D4E4B] mb-4`,children:(0,o.jsx)(`svg`,{className:`w-7 h-7 text-[#D4A017]`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,o.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z`})})}),(0,o.jsx)(`h1`,{className:`text-xl font-black text-[#3D4E4B] tracking-tight`,children:`Two-Factor Authentication`}),(0,o.jsx)(`p`,{className:`text-sm text-gray-500 font-medium mt-1`,children:t?`Enter a recovery code to continue`:`Enter the 6-digit code from your authenticator app`})]}),(0,o.jsxs)(`div`,{className:`bg-white rounded-2xl shadow-sm border border-gray-100 p-8`,children:[(0,o.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(route(`two-factor.verify`),{preserveScroll:!0})},className:`space-y-5`,children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`label`,{className:`block text-xs font-bold text-gray-500 uppercase tracking-widest mb-2`,children:t?`Recovery Code`:`Authentication Code`}),(0,o.jsx)(`input`,{type:`text`,inputMode:t?`text`:`numeric`,maxLength:t?21:6,value:i.code,onChange:e=>s(`code`,e.target.value),autoFocus:!0,className:`w-full h-12 border rounded-xl px-4 text-center font-mono font-bold text-lg tracking-[0.4em] outline-none transition-all
|
import{a as e,c as t,d as n,n as r,t as i}from"./app-CBC6ZGaO.js";var a=n(t(),1),o=i();function s(){let[t,n]=(0,a.useState)(!1),{data:i,setData:s,post:c,processing:l,errors:u}=e({code:``});return(0,o.jsxs)(`div`,{className:`min-h-screen bg-[#E3EBE8] flex items-center justify-center p-4`,children:[(0,o.jsx)(r,{title:`Two-Factor Authentication`}),(0,o.jsxs)(`div`,{className:`w-full max-w-sm`,children:[(0,o.jsxs)(`div`,{className:`text-center mb-8`,children:[(0,o.jsx)(`div`,{className:`inline-flex items-center justify-center w-14 h-14 rounded-2xl bg-[#3D4E4B] mb-4`,children:(0,o.jsx)(`svg`,{className:`w-7 h-7 text-[#D4A017]`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,o.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z`})})}),(0,o.jsx)(`h1`,{className:`text-xl font-black text-[#3D4E4B] tracking-tight`,children:`Two-Factor Authentication`}),(0,o.jsx)(`p`,{className:`text-sm text-gray-500 font-medium mt-1`,children:t?`Enter a recovery code to continue`:`Enter the 6-digit code from your authenticator app`})]}),(0,o.jsxs)(`div`,{className:`bg-white rounded-2xl shadow-sm border border-gray-100 p-8`,children:[(0,o.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(route(`two-factor.verify`),{preserveScroll:!0})},className:`space-y-5`,children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`label`,{className:`block text-xs font-bold text-gray-500 uppercase tracking-widest mb-2`,children:t?`Recovery Code`:`Authentication Code`}),(0,o.jsx)(`input`,{type:`text`,inputMode:t?`text`:`numeric`,maxLength:t?21:6,value:i.code,onChange:e=>s(`code`,e.target.value),autoFocus:!0,className:`w-full h-12 border rounded-xl px-4 text-center font-mono font-bold text-lg tracking-[0.4em] outline-none transition-all
|
||||||
${u.code?`border-red-300 bg-red-50`:`border-gray-200 focus:border-[#3D4E4B] focus:ring-2 focus:ring-[#3D4E4B]/10`}`,placeholder:t?`xxxxxxxxxx-xxxxxxxxxx`:`000000`}),u.code&&(0,o.jsx)(`p`,{className:`text-xs text-red-500 font-semibold mt-1.5`,children:u.code})]}),(0,o.jsx)(`button`,{type:`submit`,disabled:l||i.code.length<(t?5:6),className:`w-full h-11 bg-[#3D4E4B] text-white text-sm font-bold rounded-xl hover:bg-[#2D3A38] transition-all disabled:opacity-60`,children:l?`Verifying...`:`Continue`})]}),(0,o.jsx)(`div`,{className:`mt-6 text-center`,children:(0,o.jsx)(`button`,{onClick:()=>{n(!t),s(`code`,``)},className:`text-xs font-bold text-[#3D4E4B] hover:underline`,children:t?`Use authenticator code instead`:`Use a recovery code`})})]}),(0,o.jsx)(`div`,{className:`mt-6 text-center`,children:(0,o.jsx)(`a`,{href:`/login`,className:`text-xs font-semibold text-gray-400 hover:text-[#3D4E4B]`,children:`← Back to login`})})]})]})}export{s as default};
|
${u.code?`border-red-300 bg-red-50`:`border-gray-200 focus:border-[#3D4E4B] focus:ring-2 focus:ring-[#3D4E4B]/10`}`,placeholder:t?`xxxxxxxxxx-xxxxxxxxxx`:`000000`}),u.code&&(0,o.jsx)(`p`,{className:`text-xs text-red-500 font-semibold mt-1.5`,children:u.code})]}),(0,o.jsx)(`button`,{type:`submit`,disabled:l||i.code.length<(t?5:6),className:`w-full h-11 bg-[#3D4E4B] text-white text-sm font-bold rounded-xl hover:bg-[#2D3A38] transition-all disabled:opacity-60`,children:l?`Verifying...`:`Continue`})]}),(0,o.jsx)(`div`,{className:`mt-6 text-center`,children:(0,o.jsx)(`button`,{onClick:()=>{n(!t),s(`code`,``)},className:`text-xs font-bold text-[#3D4E4B] hover:underline`,children:t?`Use authenticator code instead`:`Use a recovery code`})})]}),(0,o.jsx)(`div`,{className:`mt-6 text-center`,children:(0,o.jsx)(`a`,{href:`/login`,className:`text-xs font-semibold text-gray-400 hover:text-[#3D4E4B]`,children:`← Back to login`})})]})]})}export{s as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{a as e,c as t,n,t as r}from"./app-BJ7g6sa8.js";import{t as i}from"./GuestLayout-CN-YY0cs.js";t();var a=r();function o(){let{data:t,setData:r,post:o,processing:s,errors:c,reset:l}=e({password:``});return(0,a.jsxs)(i,{children:[(0,a.jsx)(n,{title:`Confirm password`}),(0,a.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,a.jsx)(`div`,{className:`w-12 h-12 bg-[#3D4E4B]/5 rounded-2xl flex items-center justify-center mb-6`,children:(0,a.jsx)(`svg`,{className:`w-5 h-5 text-[#3D4E4B]`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:(0,a.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z`})})}),(0,a.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Confirm your password`}),(0,a.jsx)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium leading-relaxed`,children:`For your security, please confirm your password to continue.`})]}),(0,a.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),o(route(`password.confirm`),{onFinish:()=>l(`password`)})},className:`anim-up`,style:{animationDelay:`0.1s`},children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`label`,{htmlFor:`password`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`Password`}),(0,a.jsx)(`input`,{id:`password`,type:`password`,autoComplete:`current-password`,autoFocus:!0,value:t.password,onChange:e=>r(`password`,e.target.value),placeholder:`••••••••`,className:`auth-input${c.password?` !border-red-300 !bg-red-50/50`:``}`}),c.password&&(0,a.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:c.password})]}),(0,a.jsx)(`button`,{type:`submit`,disabled:s,className:`mt-6 w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:s?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,a.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,a.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Confirming…`]}):`Confirm password`})]})]})}export{o as default};
|
import{a as e,c as t,n,t as r}from"./app-CBC6ZGaO.js";import{t as i}from"./GuestLayout-DUQXV9II.js";t();var a=r();function o(){let{data:t,setData:r,post:o,processing:s,errors:c,reset:l}=e({password:``});return(0,a.jsxs)(i,{children:[(0,a.jsx)(n,{title:`Confirm password`}),(0,a.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,a.jsx)(`div`,{className:`w-12 h-12 bg-[#3D4E4B]/5 rounded-2xl flex items-center justify-center mb-6`,children:(0,a.jsx)(`svg`,{className:`w-5 h-5 text-[#3D4E4B]`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:(0,a.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z`})})}),(0,a.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Confirm your password`}),(0,a.jsx)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium leading-relaxed`,children:`For your security, please confirm your password to continue.`})]}),(0,a.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),o(route(`password.confirm`),{onFinish:()=>l(`password`)})},className:`anim-up`,style:{animationDelay:`0.1s`},children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`label`,{htmlFor:`password`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`Password`}),(0,a.jsx)(`input`,{id:`password`,type:`password`,autoComplete:`current-password`,autoFocus:!0,value:t.password,onChange:e=>r(`password`,e.target.value),placeholder:`••••••••`,className:`auth-input${c.password?` !border-red-300 !bg-red-50/50`:``}`}),c.password&&(0,a.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:c.password})]}),(0,a.jsx)(`button`,{type:`submit`,disabled:s,className:`mt-6 w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:s?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,a.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,a.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Confirming…`]}):`Confirm password`})]})]})}export{o as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{c as e,n as t,r as n,t as r}from"./app-BJ7g6sa8.js";e();var i=r(),a={403:{title:`Access Denied`,description:`You don't have permission to access this resource.`},404:{title:`Page Not Found`,description:`The page you're looking for doesn't exist or has been moved.`},419:{title:`Session Expired`,description:`Your session has expired. Please refresh and try again.`},500:{title:`Server Error`,description:`Something went wrong on our end. Please try again later.`},503:{title:`Under Maintenance`,description:`The system is temporarily unavailable. Please check back soon.`}};function o({status:e}){let{title:r,description:o}=a[e]??{title:`Unexpected Error`,description:`An unexpected error occurred.`};return(0,i.jsxs)(`div`,{className:`min-h-screen bg-[#E3EBE8] flex items-center justify-center p-6`,children:[(0,i.jsx)(t,{title:`${e} — ${r}`}),(0,i.jsxs)(`div`,{className:`w-full max-w-md`,children:[(0,i.jsxs)(`div`,{className:`bg-white rounded-3xl border border-gray-100 shadow-sm overflow-hidden`,children:[(0,i.jsxs)(`div`,{className:`bg-[#3D4E4B] px-8 py-10 text-center`,children:[(0,i.jsx)(`div`,{className:`text-7xl font-black text-white/10 tracking-tighter leading-none select-none`,children:e}),(0,i.jsx)(`div`,{className:`mt-2 text-xl font-bold text-white tracking-tight`,children:r})]}),(0,i.jsxs)(`div`,{className:`px-8 py-8 text-center space-y-6`,children:[(0,i.jsx)(`p`,{className:`text-sm font-semibold text-gray-400 leading-relaxed`,children:o}),(0,i.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3 justify-center`,children:[e===419?(0,i.jsxs)(`button`,{onClick:()=>window.location.reload(),className:`h-10 px-6 bg-[#3D4E4B] text-white text-sm font-bold tracking-tight rounded-xl hover:bg-[#2D3A38] transition-all flex items-center justify-center gap-2`,children:[(0,i.jsx)(`svg`,{className:`w-4 h-4`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,i.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15`})}),`Refresh Page`]}):(0,i.jsxs)(n,{href:`/dashboard`,className:`h-10 px-6 bg-[#3D4E4B] text-white text-sm font-bold tracking-tight rounded-xl hover:bg-[#2D3A38] transition-all flex items-center justify-center gap-2`,children:[(0,i.jsx)(`svg`,{className:`w-4 h-4`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,i.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6`})}),`Back to Dashboard`]}),(0,i.jsx)(`button`,{onClick:()=>window.history.back(),className:`h-10 px-6 bg-white border border-gray-100 text-gray-500 text-sm font-bold tracking-tight rounded-xl hover:bg-gray-50 transition-all`,children:`Go Back`})]})]})]}),(0,i.jsxs)(`p`,{className:`text-center text-xs font-bold text-gray-400 uppercase tracking-widest mt-6`,children:[`Error `,e]})]})]})}export{o as default};
|
import{c as e,n as t,r as n,t as r}from"./app-CBC6ZGaO.js";e();var i=r(),a={403:{title:`Access Denied`,description:`You don't have permission to access this resource.`},404:{title:`Page Not Found`,description:`The page you're looking for doesn't exist or has been moved.`},419:{title:`Session Expired`,description:`Your session has expired. Please refresh and try again.`},500:{title:`Server Error`,description:`Something went wrong on our end. Please try again later.`},503:{title:`Under Maintenance`,description:`The system is temporarily unavailable. Please check back soon.`}};function o({status:e}){let{title:r,description:o}=a[e]??{title:`Unexpected Error`,description:`An unexpected error occurred.`};return(0,i.jsxs)(`div`,{className:`min-h-screen bg-[#E3EBE8] flex items-center justify-center p-6`,children:[(0,i.jsx)(t,{title:`${e} — ${r}`}),(0,i.jsxs)(`div`,{className:`w-full max-w-md`,children:[(0,i.jsxs)(`div`,{className:`bg-white rounded-3xl border border-gray-100 shadow-sm overflow-hidden`,children:[(0,i.jsxs)(`div`,{className:`bg-[#3D4E4B] px-8 py-10 text-center`,children:[(0,i.jsx)(`div`,{className:`text-7xl font-black text-white/10 tracking-tighter leading-none select-none`,children:e}),(0,i.jsx)(`div`,{className:`mt-2 text-xl font-bold text-white tracking-tight`,children:r})]}),(0,i.jsxs)(`div`,{className:`px-8 py-8 text-center space-y-6`,children:[(0,i.jsx)(`p`,{className:`text-sm font-semibold text-gray-400 leading-relaxed`,children:o}),(0,i.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3 justify-center`,children:[e===419?(0,i.jsxs)(`button`,{onClick:()=>window.location.reload(),className:`h-10 px-6 bg-[#3D4E4B] text-white text-sm font-bold tracking-tight rounded-xl hover:bg-[#2D3A38] transition-all flex items-center justify-center gap-2`,children:[(0,i.jsx)(`svg`,{className:`w-4 h-4`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,i.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15`})}),`Refresh Page`]}):(0,i.jsxs)(n,{href:`/dashboard`,className:`h-10 px-6 bg-[#3D4E4B] text-white text-sm font-bold tracking-tight rounded-xl hover:bg-[#2D3A38] transition-all flex items-center justify-center gap-2`,children:[(0,i.jsx)(`svg`,{className:`w-4 h-4`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,i.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6`})}),`Back to Dashboard`]}),(0,i.jsx)(`button`,{onClick:()=>window.history.back(),className:`h-10 px-6 bg-white border border-gray-100 text-gray-500 text-sm font-bold tracking-tight rounded-xl hover:bg-gray-50 transition-all`,children:`Go Back`})]})]})]}),(0,i.jsxs)(`p`,{className:`text-center text-xs font-bold text-gray-400 uppercase tracking-widest mt-6`,children:[`Error `,e]})]})]})}export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{a as e,c as t,n,r,t as i}from"./app-BJ7g6sa8.js";import{t as a}from"./GuestLayout-CN-YY0cs.js";t();var o=i();function s({status:t}){let{data:i,setData:s,post:c,processing:l,errors:u}=e({email:``});return(0,o.jsxs)(a,{children:[(0,o.jsx)(n,{title:`Forgot password`}),(0,o.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,o.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Forgot password?`}),(0,o.jsx)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium`,children:`Enter your email and we'll send a reset link.`})]}),t&&(0,o.jsx)(`div`,{className:`mb-6 px-4 py-3 rounded-xl bg-emerald-50 border border-emerald-100 text-sm font-semibold text-emerald-700 anim-fade`,children:t}),(0,o.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(route(`password.email`))},className:`anim-up`,style:{animationDelay:`0.1s`},children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`label`,{htmlFor:`email`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`Email address`}),(0,o.jsx)(`input`,{id:`email`,type:`email`,autoComplete:`email`,autoFocus:!0,value:i.email,onChange:e=>s(`email`,e.target.value),placeholder:`you@company.com`,className:`auth-input${u.email?` !border-red-300 !bg-red-50/50`:``}`}),u.email&&(0,o.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:u.email})]}),(0,o.jsx)(`button`,{type:`submit`,disabled:l,className:`mt-6 w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,o.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,o.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Sending…`]}):`Send reset link`})]}),(0,o.jsx)(`p`,{className:`mt-7 text-center text-sm text-gray-400 font-medium anim-fade`,style:{animationDelay:`0.18s`},children:(0,o.jsx)(r,{href:route(`login`),className:`text-[#3D4E4B] font-semibold hover:text-[#D4A017] transition-colors duration-200`,children:`← Back to sign in`})})]})}export{s as default};
|
import{a as e,c as t,n,r,t as i}from"./app-CBC6ZGaO.js";import{t as a}from"./GuestLayout-DUQXV9II.js";t();var o=i();function s({status:t}){let{data:i,setData:s,post:c,processing:l,errors:u}=e({email:``});return(0,o.jsxs)(a,{children:[(0,o.jsx)(n,{title:`Forgot password`}),(0,o.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,o.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Forgot password?`}),(0,o.jsx)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium`,children:`Enter your email and we'll send a reset link.`})]}),t&&(0,o.jsx)(`div`,{className:`mb-6 px-4 py-3 rounded-xl bg-emerald-50 border border-emerald-100 text-sm font-semibold text-emerald-700 anim-fade`,children:t}),(0,o.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(route(`password.email`))},className:`anim-up`,style:{animationDelay:`0.1s`},children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`label`,{htmlFor:`email`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`Email address`}),(0,o.jsx)(`input`,{id:`email`,type:`email`,autoComplete:`email`,autoFocus:!0,value:i.email,onChange:e=>s(`email`,e.target.value),placeholder:`you@company.com`,className:`auth-input${u.email?` !border-red-300 !bg-red-50/50`:``}`}),u.email&&(0,o.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:u.email})]}),(0,o.jsx)(`button`,{type:`submit`,disabled:l,className:`mt-6 w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,o.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,o.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Sending…`]}):`Send reset link`})]}),(0,o.jsx)(`p`,{className:`mt-7 text-center text-sm text-gray-400 font-medium anim-fade`,style:{animationDelay:`0.18s`},children:(0,o.jsx)(r,{href:route(`login`),className:`text-[#3D4E4B] font-semibold hover:text-[#D4A017] transition-colors duration-200`,children:`← Back to sign in`})})]})}export{s as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{c as e,o as t,r as n,t as r}from"./app-BJ7g6sa8.js";e();var i=r();function a({children:e}){let{system_settings:r}=t().props,a=r?.app_name||`biiproject kit v2`,o=r?.app_logo,s=r?.app_logo_text||`BK`;return(0,i.jsxs)(`div`,{className:`min-h-screen flex font-sans`,children:[(0,i.jsxs)(`div`,{className:`hidden lg:flex lg:w-[44%] bg-[#3D4E4B] flex-col justify-between p-14 relative overflow-hidden shrink-0`,children:[(0,i.jsxs)(`svg`,{className:`absolute inset-0 w-full h-full pointer-events-none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,i.jsx)(`defs`,{children:(0,i.jsx)(`pattern`,{id:`dots`,x:`0`,y:`0`,width:`28`,height:`28`,patternUnits:`userSpaceOnUse`,children:(0,i.jsx)(`circle`,{cx:`1.5`,cy:`1.5`,r:`1.5`,fill:`white`,fillOpacity:`0.07`})})}),(0,i.jsx)(`rect`,{width:`100%`,height:`100%`,fill:`url(#dots)`})]}),(0,i.jsx)(`div`,{className:`absolute -bottom-40 -right-40 w-[480px] h-[480px] rounded-full border border-white/[0.06] pointer-events-none`}),(0,i.jsx)(`div`,{className:`absolute -bottom-64 -right-64 w-[700px] h-[700px] rounded-full border border-white/[0.04] pointer-events-none`}),(0,i.jsx)(`div`,{className:`absolute top-[-60px] left-[-60px] w-[300px] h-[300px] rounded-full border border-white/[0.04] pointer-events-none`}),(0,i.jsx)(`div`,{className:`relative z-10 anim-fade`,children:(0,i.jsxs)(n,{href:`/`,className:`inline-flex items-center gap-3 group`,children:[(0,i.jsx)(`div`,{className:`w-10 h-10 rounded-[0.75rem] flex items-center justify-center overflow-hidden text-sm font-bold text-white shrink-0 ${o?`bg-white/10`:`bg-[#D4A017]`}`,children:o?(0,i.jsx)(`img`,{src:o,alt:a,className:`w-full h-full object-contain`}):s}),(0,i.jsx)(`span`,{className:`text-white font-bold text-base tracking-tight`,children:a})]})}),(0,i.jsxs)(`div`,{className:`relative z-10 anim-up`,style:{animationDelay:`0.1s`},children:[(0,i.jsx)(`p`,{className:`text-[#D4A017] text-xs font-bold uppercase tracking-[0.18em] mb-5`,children:`Enterprise Platform`}),(0,i.jsxs)(`h2`,{className:`text-white text-[2rem] font-bold leading-[1.2] tracking-tight`,children:[`Manage your`,(0,i.jsx)(`br`,{}),`organization`,(0,i.jsx)(`br`,{}),`with precision.`]}),(0,i.jsx)(`p`,{className:`mt-5 text-[#E3EBE8]/45 text-sm leading-relaxed max-w-xs`,children:`Access control, user management, and system configuration — unified in one secure interface.`}),(0,i.jsx)(`div`,{className:`mt-9 flex flex-col gap-3`,children:[`Role-based access control`,`Real-time audit logs`,`Multi-level permissions`].map(e=>(0,i.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,i.jsx)(`div`,{className:`w-1.5 h-1.5 rounded-full bg-[#D4A017] shrink-0`}),(0,i.jsx)(`span`,{className:`text-[#E3EBE8]/55 text-sm font-medium`,children:e})]},e))})]}),(0,i.jsx)(`div`,{className:`relative z-10 anim-fade`,style:{animationDelay:`0.2s`},children:(0,i.jsxs)(`p`,{className:`text-[#E3EBE8]/25 text-xs`,children:[`© `,new Date().getFullYear(),` `,a,`. All rights reserved.`]})})]}),(0,i.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center bg-white px-8 py-12 min-h-screen`,children:[(0,i.jsxs)(`div`,{className:`lg:hidden mb-10 flex items-center gap-3 anim-down`,children:[(0,i.jsx)(`div`,{className:`w-9 h-9 rounded-[0.6rem] flex items-center justify-center text-sm font-bold overflow-hidden ${o?``:`bg-[#3D4E4B] text-white`}`,children:o?(0,i.jsx)(`img`,{src:o,alt:a,className:`w-full h-full object-contain`}):s}),(0,i.jsx)(`span`,{className:`text-[#3D4E4B] font-bold text-base tracking-tight`,children:a})]}),(0,i.jsx)(`div`,{className:`w-full max-w-[360px]`,children:e}),(0,i.jsx)(`div`,{className:`mt-10 anim-fade`,style:{animationDelay:`0.35s`},children:(0,i.jsxs)(n,{href:`/`,className:`inline-flex items-center gap-1.5 text-xs font-semibold text-gray-300 hover:text-[#3D4E4B] transition-colors duration-200 tracking-tight`,children:[(0,i.jsx)(`svg`,{className:`w-3.5 h-3.5`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,i.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M10 19l-7-7m0 0l7-7m-7 7h18`})}),`Back to home`]})})]})]})}export{a as t};
|
import{c as e,o as t,r as n,t as r}from"./app-CBC6ZGaO.js";e();var i=r();function a({children:e}){let{system_settings:r}=t().props,a=r?.app_name||`biiproject kit v2`,o=r?.app_logo,s=r?.app_logo_text||`BK`;return(0,i.jsxs)(`div`,{className:`min-h-screen flex font-sans`,children:[(0,i.jsxs)(`div`,{className:`hidden lg:flex lg:w-[44%] bg-[#3D4E4B] flex-col justify-between p-14 relative overflow-hidden shrink-0`,children:[(0,i.jsxs)(`svg`,{className:`absolute inset-0 w-full h-full pointer-events-none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,i.jsx)(`defs`,{children:(0,i.jsx)(`pattern`,{id:`dots`,x:`0`,y:`0`,width:`28`,height:`28`,patternUnits:`userSpaceOnUse`,children:(0,i.jsx)(`circle`,{cx:`1.5`,cy:`1.5`,r:`1.5`,fill:`white`,fillOpacity:`0.07`})})}),(0,i.jsx)(`rect`,{width:`100%`,height:`100%`,fill:`url(#dots)`})]}),(0,i.jsx)(`div`,{className:`absolute -bottom-40 -right-40 w-[480px] h-[480px] rounded-full border border-white/[0.06] pointer-events-none`}),(0,i.jsx)(`div`,{className:`absolute -bottom-64 -right-64 w-[700px] h-[700px] rounded-full border border-white/[0.04] pointer-events-none`}),(0,i.jsx)(`div`,{className:`absolute top-[-60px] left-[-60px] w-[300px] h-[300px] rounded-full border border-white/[0.04] pointer-events-none`}),(0,i.jsx)(`div`,{className:`relative z-10 anim-fade`,children:(0,i.jsxs)(n,{href:`/`,className:`inline-flex items-center gap-3 group`,children:[(0,i.jsx)(`div`,{className:`w-10 h-10 rounded-[0.75rem] flex items-center justify-center overflow-hidden text-sm font-bold text-white shrink-0 ${o?`bg-white/10`:`bg-[#D4A017]`}`,children:o?(0,i.jsx)(`img`,{src:o,alt:a,className:`w-full h-full object-contain`}):s}),(0,i.jsx)(`span`,{className:`text-white font-bold text-base tracking-tight`,children:a})]})}),(0,i.jsxs)(`div`,{className:`relative z-10 anim-up`,style:{animationDelay:`0.1s`},children:[(0,i.jsx)(`p`,{className:`text-[#D4A017] text-xs font-bold uppercase tracking-[0.18em] mb-5`,children:`Enterprise Platform`}),(0,i.jsxs)(`h2`,{className:`text-white text-[2rem] font-bold leading-[1.2] tracking-tight`,children:[`Manage your`,(0,i.jsx)(`br`,{}),`organization`,(0,i.jsx)(`br`,{}),`with precision.`]}),(0,i.jsx)(`p`,{className:`mt-5 text-[#E3EBE8]/45 text-sm leading-relaxed max-w-xs`,children:`Access control, user management, and system configuration — unified in one secure interface.`}),(0,i.jsx)(`div`,{className:`mt-9 flex flex-col gap-3`,children:[`Role-based access control`,`Real-time audit logs`,`Multi-level permissions`].map(e=>(0,i.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,i.jsx)(`div`,{className:`w-1.5 h-1.5 rounded-full bg-[#D4A017] shrink-0`}),(0,i.jsx)(`span`,{className:`text-[#E3EBE8]/55 text-sm font-medium`,children:e})]},e))})]}),(0,i.jsx)(`div`,{className:`relative z-10 anim-fade`,style:{animationDelay:`0.2s`},children:(0,i.jsxs)(`p`,{className:`text-[#E3EBE8]/25 text-xs`,children:[`© `,new Date().getFullYear(),` `,a,`. All rights reserved.`]})})]}),(0,i.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center bg-white px-8 py-12 min-h-screen`,children:[(0,i.jsxs)(`div`,{className:`lg:hidden mb-10 flex items-center gap-3 anim-down`,children:[(0,i.jsx)(`div`,{className:`w-9 h-9 rounded-[0.6rem] flex items-center justify-center text-sm font-bold overflow-hidden ${o?``:`bg-[#3D4E4B] text-white`}`,children:o?(0,i.jsx)(`img`,{src:o,alt:a,className:`w-full h-full object-contain`}):s}),(0,i.jsx)(`span`,{className:`text-[#3D4E4B] font-bold text-base tracking-tight`,children:a})]}),(0,i.jsx)(`div`,{className:`w-full max-w-[360px]`,children:e}),(0,i.jsx)(`div`,{className:`mt-10 anim-fade`,style:{animationDelay:`0.35s`},children:(0,i.jsxs)(n,{href:`/`,className:`inline-flex items-center gap-1.5 text-xs font-semibold text-gray-300 hover:text-[#3D4E4B] transition-colors duration-200 tracking-tight`,children:[(0,i.jsx)(`svg`,{className:`w-3.5 h-3.5`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2.5,children:(0,i.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M10 19l-7-7m0 0l7-7m-7 7h18`})}),`Back to home`]})})]})]})}export{a as t};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{d as e,s as t}from"./app-BJ7g6sa8.js";var n=e(t(),1);function r({children:e}){return(0,n.createPortal)(e,document.body)}export{r as t};
|
import{d as e,s as t}from"./app-CBC6ZGaO.js";var n=e(t(),1);function r({children:e}){return(0,n.createPortal)(e,document.body)}export{r as t};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{t as e}from"./app-BJ7g6sa8.js";var t=e();function n({className:e=``,disabled:n,children:r,...i}){return(0,t.jsx)(`button`,{...i,className:`inline-flex items-center rounded-md border border-transparent bg-gray-800 px-4 py-2 text-xs font-bold tracking-tight text-white transition duration-150 ease-in-out hover:bg-gray-700 focus:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 active:bg-gray-900 ${n&&`opacity-25`} `+e,disabled:n,children:r})}export{n as t};
|
import{t as e}from"./app-CBC6ZGaO.js";var t=e();function n({className:e=``,disabled:n,children:r,...i}){return(0,t.jsx)(`button`,{...i,className:`inline-flex items-center rounded-md border border-transparent bg-gray-800 px-4 py-2 text-xs font-bold tracking-tight text-white transition duration-150 ease-in-out hover:bg-gray-700 focus:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 active:bg-gray-900 ${n&&`opacity-25`} `+e,disabled:n,children:r})}export{n as t};
|
||||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{a as e,c as t,n,t as r}from"./app-BJ7g6sa8.js";import{t as i}from"./GuestLayout-CN-YY0cs.js";t();var a=r();function o({token:t,email:r}){let{data:o,setData:s,post:c,processing:l,errors:u,reset:d}=e({token:t,email:r,password:``,password_confirmation:``});return(0,a.jsxs)(i,{children:[(0,a.jsx)(n,{title:`Reset password`}),(0,a.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,a.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Set new password`}),(0,a.jsxs)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium`,children:[`Choose a strong password for `,(0,a.jsx)(`span`,{className:`text-[#3D4E4B] font-semibold`,children:r}),`.`]})]}),(0,a.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(route(`password.store`),{onFinish:()=>d(`password`,`password_confirmation`)})},className:`space-y-4 anim-up`,style:{animationDelay:`0.1s`},children:[(0,a.jsx)(`input`,{type:`hidden`,value:o.email}),(0,a.jsx)(`input`,{type:`hidden`,value:o.token}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`label`,{htmlFor:`password`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`New password`}),(0,a.jsx)(`input`,{id:`password`,type:`password`,autoComplete:`new-password`,autoFocus:!0,value:o.password,onChange:e=>s(`password`,e.target.value),placeholder:`Min. 8 characters`,className:`auth-input${u.password?` !border-red-300 !bg-red-50/50`:``}`}),u.password&&(0,a.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:u.password})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`label`,{htmlFor:`password_confirmation`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`Confirm new password`}),(0,a.jsx)(`input`,{id:`password_confirmation`,type:`password`,autoComplete:`new-password`,value:o.password_confirmation,onChange:e=>s(`password_confirmation`,e.target.value),placeholder:`••••••••`,className:`auth-input${u.password_confirmation?` !border-red-300 !bg-red-50/50`:``}`}),u.password_confirmation&&(0,a.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:u.password_confirmation})]}),(0,a.jsx)(`button`,{type:`submit`,disabled:l,className:`mt-2 w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:l?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,a.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,a.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Saving…`]}):`Reset password`})]})]})}export{o as default};
|
import{a as e,c as t,n,t as r}from"./app-CBC6ZGaO.js";import{t as i}from"./GuestLayout-DUQXV9II.js";t();var a=r();function o({token:t,email:r}){let{data:o,setData:s,post:c,processing:l,errors:u,reset:d}=e({token:t,email:r,password:``,password_confirmation:``});return(0,a.jsxs)(i,{children:[(0,a.jsx)(n,{title:`Reset password`}),(0,a.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,a.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Set new password`}),(0,a.jsxs)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium`,children:[`Choose a strong password for `,(0,a.jsx)(`span`,{className:`text-[#3D4E4B] font-semibold`,children:r}),`.`]})]}),(0,a.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),c(route(`password.store`),{onFinish:()=>d(`password`,`password_confirmation`)})},className:`space-y-4 anim-up`,style:{animationDelay:`0.1s`},children:[(0,a.jsx)(`input`,{type:`hidden`,value:o.email}),(0,a.jsx)(`input`,{type:`hidden`,value:o.token}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`label`,{htmlFor:`password`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`New password`}),(0,a.jsx)(`input`,{id:`password`,type:`password`,autoComplete:`new-password`,autoFocus:!0,value:o.password,onChange:e=>s(`password`,e.target.value),placeholder:`Min. 8 characters`,className:`auth-input${u.password?` !border-red-300 !bg-red-50/50`:``}`}),u.password&&(0,a.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:u.password})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`label`,{htmlFor:`password_confirmation`,className:`block text-sm font-semibold text-gray-600 mb-1.5`,children:`Confirm new password`}),(0,a.jsx)(`input`,{id:`password_confirmation`,type:`password`,autoComplete:`new-password`,value:o.password_confirmation,onChange:e=>s(`password_confirmation`,e.target.value),placeholder:`••••••••`,className:`auth-input${u.password_confirmation?` !border-red-300 !bg-red-50/50`:``}`}),u.password_confirmation&&(0,a.jsx)(`p`,{className:`mt-1.5 text-xs font-semibold text-red-500`,children:u.password_confirmation})]}),(0,a.jsx)(`button`,{type:`submit`,disabled:l,className:`mt-2 w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:l?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,a.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,a.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Saving…`]}):`Reset password`})]})]})}export{o as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
import{c as e,d as t,t as n}from"./app-BJ7g6sa8.js";var r=n();function i({message:e,className:t=``,...n}){return e?(0,r.jsx)(`p`,{...n,className:`text-sm text-red-600 `+t,children:e}):null}function a({value:e,className:t=``,children:n,...i}){return(0,r.jsx)(`label`,{...i,className:`block text-sm font-medium text-gray-700 `+t,children:e||n})}var o=t(e(),1),s=Object.defineProperty,c=(e,t,n)=>t in e?s(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l=(e,t,n)=>(c(e,typeof t==`symbol`?t:t+``,n),n),u=new class{constructor(){l(this,`current`,this.detect()),l(this,`handoffState`,`pending`),l(this,`currentId`,0)}set(e){this.current!==e&&(this.handoffState=`pending`,this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===`server`}get isClient(){return this.current===`client`}detect(){return typeof window>`u`||typeof document>`u`?`server`:`client`}handoff(){this.handoffState===`pending`&&(this.handoffState=`complete`)}get isHandoffComplete(){return this.handoffState===`complete`}};function d(e){typeof queueMicrotask==`function`?queueMicrotask(e):Promise.resolve().then(e).catch(e=>setTimeout(()=>{throw e}))}function f(){let e=[],t={addEventListener(e,n,r,i){return e.addEventListener(n,r,i),t.add(()=>e.removeEventListener(n,r,i))},requestAnimationFrame(...e){let n=requestAnimationFrame(...e);return t.add(()=>cancelAnimationFrame(n))},nextFrame(...e){return t.requestAnimationFrame(()=>t.requestAnimationFrame(...e))},setTimeout(...e){let n=setTimeout(...e);return t.add(()=>clearTimeout(n))},microTask(...e){let n={current:!0};return d(()=>{n.current&&e[0]()}),t.add(()=>{n.current=!1})},style(e,t,n){let r=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:n}),this.add(()=>{Object.assign(e.style,{[t]:r})})},group(e){let t=f();return e(t),this.add(()=>t.dispose())},add(t){return e.includes(t)||e.push(t),()=>{let n=e.indexOf(t);if(n>=0)for(let t of e.splice(n,1))t()}},dispose(){for(let t of e.splice(0))t()}};return t}function p(){let[e]=(0,o.useState)(f);return(0,o.useEffect)(()=>()=>e.dispose(),[e]),e}var m=(e,t)=>{u.isServer?(0,o.useEffect)(e,t):(0,o.useLayoutEffect)(e,t)};function h(e){let t=(0,o.useRef)(e);return m(()=>{t.current=e},[e]),t}var g=function(e){let t=h(e);return o.useCallback((...e)=>t.current(...e),[t])};function _(...e){return Array.from(new Set(e.flatMap(e=>typeof e==`string`?e.split(` `):[]))).filter(Boolean).join(` `)}function v(e,t,...n){if(e in t){let r=t[e];return typeof r==`function`?r(...n):r}let r=Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map(e=>`"${e}"`).join(`, `)}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,v),r}var y=(e=>(e[e.None=0]=`None`,e[e.RenderStrategy=1]=`RenderStrategy`,e[e.Static=2]=`Static`,e))(y||{}),b=(e=>(e[e.Unmount=0]=`Unmount`,e[e.Hidden=1]=`Hidden`,e))(b||{});function x(){let e=ee();return(0,o.useCallback)(t=>S({mergeRefs:e,...t}),[e])}function S({ourProps:e,theirProps:t,slot:n,defaultTag:r,features:i,visible:a=!0,name:o,mergeRefs:s}){s??=w;let c=T(t,e);if(a)return C(c,n,r,o,s);let l=i??0;if(l&2){let{static:e=!1,...t}=c;if(e)return C(t,n,r,o,s)}if(l&1){let{unmount:e=!0,...t}=c;return v(+!e,{0(){return null},1(){return C({...t,hidden:!0,style:{display:`none`}},n,r,o,s)}})}return C(c,n,r,o,s)}function C(e,t={},n,r,i){let{as:a=n,children:s,refName:c=`ref`,...l}=O(e,[`unmount`,`static`]),u=e.ref===void 0?{}:{[c]:e.ref},d=typeof s==`function`?s(t):s;d=A(d),`className`in l&&l.className&&typeof l.className==`function`&&(l.className=l.className(t)),l[`aria-labelledby`]&&l[`aria-labelledby`]===l.id&&(l[`aria-labelledby`]=void 0);let f={};if(t){let e=!1,n=[];for(let[r,i]of Object.entries(t))typeof i==`boolean`&&(e=!0),i===!0&&n.push(r.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`));if(e){f[`data-headlessui-state`]=n.join(` `);for(let e of n)f[`data-${e}`]=``}}if(j(a)&&(Object.keys(D(l)).length>0||Object.keys(D(f)).length>0))if(!(0,o.isValidElement)(d)||Array.isArray(d)&&d.length>1||M(d)){if(Object.keys(D(l)).length>0)throw Error([`Passing props on "Fragment"!`,``,`The current component <${r} /> is rendering a "Fragment".`,`However we need to passthrough the following props:`,Object.keys(D(l)).concat(Object.keys(D(f))).map(e=>` - ${e}`).join(`
|
import{c as e,d as t,t as n}from"./app-CBC6ZGaO.js";var r=n();function i({message:e,className:t=``,...n}){return e?(0,r.jsx)(`p`,{...n,className:`text-sm text-red-600 `+t,children:e}):null}function a({value:e,className:t=``,children:n,...i}){return(0,r.jsx)(`label`,{...i,className:`block text-sm font-medium text-gray-700 `+t,children:e||n})}var o=t(e(),1),s=Object.defineProperty,c=(e,t,n)=>t in e?s(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l=(e,t,n)=>(c(e,typeof t==`symbol`?t:t+``,n),n),u=new class{constructor(){l(this,`current`,this.detect()),l(this,`handoffState`,`pending`),l(this,`currentId`,0)}set(e){this.current!==e&&(this.handoffState=`pending`,this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===`server`}get isClient(){return this.current===`client`}detect(){return typeof window>`u`||typeof document>`u`?`server`:`client`}handoff(){this.handoffState===`pending`&&(this.handoffState=`complete`)}get isHandoffComplete(){return this.handoffState===`complete`}};function d(e){typeof queueMicrotask==`function`?queueMicrotask(e):Promise.resolve().then(e).catch(e=>setTimeout(()=>{throw e}))}function f(){let e=[],t={addEventListener(e,n,r,i){return e.addEventListener(n,r,i),t.add(()=>e.removeEventListener(n,r,i))},requestAnimationFrame(...e){let n=requestAnimationFrame(...e);return t.add(()=>cancelAnimationFrame(n))},nextFrame(...e){return t.requestAnimationFrame(()=>t.requestAnimationFrame(...e))},setTimeout(...e){let n=setTimeout(...e);return t.add(()=>clearTimeout(n))},microTask(...e){let n={current:!0};return d(()=>{n.current&&e[0]()}),t.add(()=>{n.current=!1})},style(e,t,n){let r=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:n}),this.add(()=>{Object.assign(e.style,{[t]:r})})},group(e){let t=f();return e(t),this.add(()=>t.dispose())},add(t){return e.includes(t)||e.push(t),()=>{let n=e.indexOf(t);if(n>=0)for(let t of e.splice(n,1))t()}},dispose(){for(let t of e.splice(0))t()}};return t}function p(){let[e]=(0,o.useState)(f);return(0,o.useEffect)(()=>()=>e.dispose(),[e]),e}var m=(e,t)=>{u.isServer?(0,o.useEffect)(e,t):(0,o.useLayoutEffect)(e,t)};function h(e){let t=(0,o.useRef)(e);return m(()=>{t.current=e},[e]),t}var g=function(e){let t=h(e);return o.useCallback((...e)=>t.current(...e),[t])};function _(...e){return Array.from(new Set(e.flatMap(e=>typeof e==`string`?e.split(` `):[]))).filter(Boolean).join(` `)}function v(e,t,...n){if(e in t){let r=t[e];return typeof r==`function`?r(...n):r}let r=Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map(e=>`"${e}"`).join(`, `)}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,v),r}var y=(e=>(e[e.None=0]=`None`,e[e.RenderStrategy=1]=`RenderStrategy`,e[e.Static=2]=`Static`,e))(y||{}),b=(e=>(e[e.Unmount=0]=`Unmount`,e[e.Hidden=1]=`Hidden`,e))(b||{});function x(){let e=ee();return(0,o.useCallback)(t=>S({mergeRefs:e,...t}),[e])}function S({ourProps:e,theirProps:t,slot:n,defaultTag:r,features:i,visible:a=!0,name:o,mergeRefs:s}){s??=w;let c=T(t,e);if(a)return C(c,n,r,o,s);let l=i??0;if(l&2){let{static:e=!1,...t}=c;if(e)return C(t,n,r,o,s)}if(l&1){let{unmount:e=!0,...t}=c;return v(+!e,{0(){return null},1(){return C({...t,hidden:!0,style:{display:`none`}},n,r,o,s)}})}return C(c,n,r,o,s)}function C(e,t={},n,r,i){let{as:a=n,children:s,refName:c=`ref`,...l}=O(e,[`unmount`,`static`]),u=e.ref===void 0?{}:{[c]:e.ref},d=typeof s==`function`?s(t):s;d=A(d),`className`in l&&l.className&&typeof l.className==`function`&&(l.className=l.className(t)),l[`aria-labelledby`]&&l[`aria-labelledby`]===l.id&&(l[`aria-labelledby`]=void 0);let f={};if(t){let e=!1,n=[];for(let[r,i]of Object.entries(t))typeof i==`boolean`&&(e=!0),i===!0&&n.push(r.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`));if(e){f[`data-headlessui-state`]=n.join(` `);for(let e of n)f[`data-${e}`]=``}}if(j(a)&&(Object.keys(D(l)).length>0||Object.keys(D(f)).length>0))if(!(0,o.isValidElement)(d)||Array.isArray(d)&&d.length>1||M(d)){if(Object.keys(D(l)).length>0)throw Error([`Passing props on "Fragment"!`,``,`The current component <${r} /> is rendering a "Fragment".`,`However we need to passthrough the following props:`,Object.keys(D(l)).concat(Object.keys(D(f))).map(e=>` - ${e}`).join(`
|
||||||
`),``,`You can apply a few solutions:`,['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',`Render a single element as the child so that we can forward the props onto that element.`].map(e=>` - ${e}`).join(`
|
`),``,`You can apply a few solutions:`,['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',`Render a single element as the child so that we can forward the props onto that element.`].map(e=>` - ${e}`).join(`
|
||||||
`)].join(`
|
`)].join(`
|
||||||
`))}else{let e=d.props?.className,t=typeof e==`function`?(...t)=>_(e(...t),l.className):_(e,l.className),n=t?{className:t}:{},r=T(d.props,D(O(l,[`ref`])));for(let e in f)e in r&&delete f[e];return(0,o.cloneElement)(d,Object.assign({},r,f,u,{ref:i(k(d),u.ref)},n))}return(0,o.createElement)(a,Object.assign({},O(l,[`ref`]),!j(a)&&u,!j(a)&&f),d)}function ee(){let e=(0,o.useRef)([]),t=(0,o.useCallback)(t=>{for(let n of e.current)n!=null&&(typeof n==`function`?n(t):n.current=t)},[]);return(...n)=>{if(!n.every(e=>e==null))return e.current=n,t}}function w(...e){return e.every(e=>e==null)?void 0:t=>{for(let n of e)n!=null&&(typeof n==`function`?n(t):n.current=t)}}function T(...e){if(e.length===0)return{};if(e.length===1)return e[0];let t={},n={};for(let r of e)for(let e in r)e.startsWith(`on`)&&typeof r[e]==`function`?(n[e]??(n[e]=[]),n[e].push(r[e])):t[e]=r[e];if(t.disabled||t[`aria-disabled`])for(let e in n)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(e)&&(n[e]=[e=>(e?.preventDefault)?.call(e)]);for(let e in n)Object.assign(t,{[e](t,...r){let i=n[e];for(let e of i){if((t instanceof Event||t?.nativeEvent instanceof Event)&&t.defaultPrevented)return;e(t,...r)}}});return t}function E(e){return Object.assign((0,o.forwardRef)(e),{displayName:e.displayName??e.name})}function D(e){let t=Object.assign({},e);for(let e in t)t[e]===void 0&&delete t[e];return t}function O(e,t=[]){let n=Object.assign({},e);for(let e of t)e in n&&delete n[e];return n}function k(e){return`18.3.1`.split(`.`)[0]>=`19`?e.props.ref:e.ref}function A(e){if(e!=null&&e.$$typeof===Symbol.for(`react.lazy`)){let t=e._payload;if(t!=null&&t.status===`fulfilled`)return A(t.value)}return e}function j(e){return e===o.Fragment||e===Symbol.for(`react.fragment`)}function M(e){return j(e.type)}var N=Symbol();function P(e,t=!0){return Object.assign(e,{[N]:t})}function F(...e){let t=(0,o.useRef)(e);(0,o.useEffect)(()=>{t.current=e},[e]);let n=g(e=>{for(let n of t.current)n!=null&&(typeof n==`function`?n(e):n.current=e)});return e.every(e=>e==null||e?.[N])?void 0:n}function I(e=0){let[t,n]=(0,o.useState)(e);return{flags:t,setFlag:(0,o.useCallback)(e=>n(e),[]),addFlag:(0,o.useCallback)(e=>n(t=>t|e),[]),hasFlag:(0,o.useCallback)(e=>(t&e)===e,[t]),removeFlag:(0,o.useCallback)(e=>n(t=>t&~e),[]),toggleFlag:(0,o.useCallback)(e=>n(t=>t^e),[])}}typeof process<`u`&&typeof globalThis<`u`&&typeof Element<`u`&&(process==null?void 0:{})?.NODE_ENV===`test`&&(Element==null?void 0:Element.prototype)?.getAnimations===void 0&&(Element.prototype.getAnimations=function(){return console.warn(["Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.","Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.",``,`Example usage:`,"```js",`import { mockAnimationsApi } from 'jsdom-testing-mocks'`,`mockAnimationsApi()`,"```"].join(`
|
`))}else{let e=d.props?.className,t=typeof e==`function`?(...t)=>_(e(...t),l.className):_(e,l.className),n=t?{className:t}:{},r=T(d.props,D(O(l,[`ref`])));for(let e in f)e in r&&delete f[e];return(0,o.cloneElement)(d,Object.assign({},r,f,u,{ref:i(k(d),u.ref)},n))}return(0,o.createElement)(a,Object.assign({},O(l,[`ref`]),!j(a)&&u,!j(a)&&f),d)}function ee(){let e=(0,o.useRef)([]),t=(0,o.useCallback)(t=>{for(let n of e.current)n!=null&&(typeof n==`function`?n(t):n.current=t)},[]);return(...n)=>{if(!n.every(e=>e==null))return e.current=n,t}}function w(...e){return e.every(e=>e==null)?void 0:t=>{for(let n of e)n!=null&&(typeof n==`function`?n(t):n.current=t)}}function T(...e){if(e.length===0)return{};if(e.length===1)return e[0];let t={},n={};for(let r of e)for(let e in r)e.startsWith(`on`)&&typeof r[e]==`function`?(n[e]??(n[e]=[]),n[e].push(r[e])):t[e]=r[e];if(t.disabled||t[`aria-disabled`])for(let e in n)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(e)&&(n[e]=[e=>(e?.preventDefault)?.call(e)]);for(let e in n)Object.assign(t,{[e](t,...r){let i=n[e];for(let e of i){if((t instanceof Event||t?.nativeEvent instanceof Event)&&t.defaultPrevented)return;e(t,...r)}}});return t}function E(e){return Object.assign((0,o.forwardRef)(e),{displayName:e.displayName??e.name})}function D(e){let t=Object.assign({},e);for(let e in t)t[e]===void 0&&delete t[e];return t}function O(e,t=[]){let n=Object.assign({},e);for(let e of t)e in n&&delete n[e];return n}function k(e){return`18.3.1`.split(`.`)[0]>=`19`?e.props.ref:e.ref}function A(e){if(e!=null&&e.$$typeof===Symbol.for(`react.lazy`)){let t=e._payload;if(t!=null&&t.status===`fulfilled`)return A(t.value)}return e}function j(e){return e===o.Fragment||e===Symbol.for(`react.fragment`)}function M(e){return j(e.type)}var N=Symbol();function P(e,t=!0){return Object.assign(e,{[N]:t})}function F(...e){let t=(0,o.useRef)(e);(0,o.useEffect)(()=>{t.current=e},[e]);let n=g(e=>{for(let n of t.current)n!=null&&(typeof n==`function`?n(e):n.current=e)});return e.every(e=>e==null||e?.[N])?void 0:n}function I(e=0){let[t,n]=(0,o.useState)(e);return{flags:t,setFlag:(0,o.useCallback)(e=>n(e),[]),addFlag:(0,o.useCallback)(e=>n(t=>t|e),[]),hasFlag:(0,o.useCallback)(e=>(t&e)===e,[t]),removeFlag:(0,o.useCallback)(e=>n(t=>t&~e),[]),toggleFlag:(0,o.useCallback)(e=>n(t=>t^e),[])}}typeof process<`u`&&typeof globalThis<`u`&&typeof Element<`u`&&(process==null?void 0:{})?.NODE_ENV===`test`&&(Element==null?void 0:Element.prototype)?.getAnimations===void 0&&(Element.prototype.getAnimations=function(){return console.warn(["Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.","Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.",``,`Example usage:`,"```js",`import { mockAnimationsApi } from 'jsdom-testing-mocks'`,`mockAnimationsApi()`,"```"].join(`
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{a as e,c as t,d as n,t as r}from"./app-BJ7g6sa8.js";import{C as i,S as a,n as o,t as s}from"./TextInput-DV7QeRn3.js";import{t as c}from"./PrimaryButton-KeVcwQeg.js";var l=n(t(),1),u=r();function d({className:t=``}){let n=(0,l.useRef)(),r=(0,l.useRef)(),{data:d,setData:f,errors:p,put:m,reset:h,processing:g,recentlySuccessful:_}=e({current_password:``,password:``,password_confirmation:``});return(0,u.jsxs)(`section`,{className:t,children:[(0,u.jsxs)(`header`,{children:[(0,u.jsx)(`h2`,{className:`text-lg font-medium text-gray-900`,children:`Update Password`}),(0,u.jsx)(`p`,{className:`mt-1 text-sm text-gray-600`,children:`Ensure your account is using a long, random password to stay secure.`})]}),(0,u.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),m(route(`password.update`),{preserveScroll:!0,onSuccess:()=>h(),onError:e=>{e.password&&(h(`password`,`password_confirmation`),n.current.focus()),e.current_password&&(h(`current_password`),r.current.focus())}})},className:`mt-6 space-y-6`,children:[(0,u.jsxs)(`div`,{children:[(0,u.jsx)(a,{htmlFor:`current_password`,value:`Current Password`}),(0,u.jsx)(s,{id:`current_password`,ref:r,value:d.current_password,onChange:e=>f(`current_password`,e.target.value),type:`password`,className:`mt-1 block w-full`,autoComplete:`current-password`}),(0,u.jsx)(i,{message:p.current_password,className:`mt-2`})]}),(0,u.jsxs)(`div`,{children:[(0,u.jsx)(a,{htmlFor:`password`,value:`New Password`}),(0,u.jsx)(s,{id:`password`,ref:n,value:d.password,onChange:e=>f(`password`,e.target.value),type:`password`,className:`mt-1 block w-full`,autoComplete:`new-password`}),(0,u.jsx)(i,{message:p.password,className:`mt-2`})]}),(0,u.jsxs)(`div`,{children:[(0,u.jsx)(a,{htmlFor:`password_confirmation`,value:`Confirm Password`}),(0,u.jsx)(s,{id:`password_confirmation`,value:d.password_confirmation,onChange:e=>f(`password_confirmation`,e.target.value),type:`password`,className:`mt-1 block w-full`,autoComplete:`new-password`}),(0,u.jsx)(i,{message:p.password_confirmation,className:`mt-2`})]}),(0,u.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,u.jsx)(c,{disabled:g,children:`Save`}),(0,u.jsx)(o,{show:_,enter:`transition ease-in-out`,enterFrom:`opacity-0`,leave:`transition ease-in-out`,leaveTo:`opacity-0`,children:(0,u.jsx)(`p`,{className:`text-sm text-gray-600`,children:`Saved.`})})]})]})]})}export{d as default};
|
import{a as e,c as t,d as n,t as r}from"./app-CBC6ZGaO.js";import{C as i,S as a,n as o,t as s}from"./TextInput--H1JolRE.js";import{t as c}from"./PrimaryButton-DMaDfcck.js";var l=n(t(),1),u=r();function d({className:t=``}){let n=(0,l.useRef)(),r=(0,l.useRef)(),{data:d,setData:f,errors:p,put:m,reset:h,processing:g,recentlySuccessful:_}=e({current_password:``,password:``,password_confirmation:``});return(0,u.jsxs)(`section`,{className:t,children:[(0,u.jsxs)(`header`,{children:[(0,u.jsx)(`h2`,{className:`text-lg font-medium text-gray-900`,children:`Update Password`}),(0,u.jsx)(`p`,{className:`mt-1 text-sm text-gray-600`,children:`Ensure your account is using a long, random password to stay secure.`})]}),(0,u.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),m(route(`password.update`),{preserveScroll:!0,onSuccess:()=>h(),onError:e=>{e.password&&(h(`password`,`password_confirmation`),n.current.focus()),e.current_password&&(h(`current_password`),r.current.focus())}})},className:`mt-6 space-y-6`,children:[(0,u.jsxs)(`div`,{children:[(0,u.jsx)(a,{htmlFor:`current_password`,value:`Current Password`}),(0,u.jsx)(s,{id:`current_password`,ref:r,value:d.current_password,onChange:e=>f(`current_password`,e.target.value),type:`password`,className:`mt-1 block w-full`,autoComplete:`current-password`}),(0,u.jsx)(i,{message:p.current_password,className:`mt-2`})]}),(0,u.jsxs)(`div`,{children:[(0,u.jsx)(a,{htmlFor:`password`,value:`New Password`}),(0,u.jsx)(s,{id:`password`,ref:n,value:d.password,onChange:e=>f(`password`,e.target.value),type:`password`,className:`mt-1 block w-full`,autoComplete:`new-password`}),(0,u.jsx)(i,{message:p.password,className:`mt-2`})]}),(0,u.jsxs)(`div`,{children:[(0,u.jsx)(a,{htmlFor:`password_confirmation`,value:`Confirm Password`}),(0,u.jsx)(s,{id:`password_confirmation`,value:d.password_confirmation,onChange:e=>f(`password_confirmation`,e.target.value),type:`password`,className:`mt-1 block w-full`,autoComplete:`new-password`}),(0,u.jsx)(i,{message:p.password_confirmation,className:`mt-2`})]}),(0,u.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,u.jsx)(c,{disabled:g,children:`Save`}),(0,u.jsx)(o,{show:_,enter:`transition ease-in-out`,enterFrom:`opacity-0`,leave:`transition ease-in-out`,leaveTo:`opacity-0`,children:(0,u.jsx)(`p`,{className:`text-sm text-gray-600`,children:`Saved.`})})]})]})]})}export{d as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{a as e,o as t,r as n,t as r}from"./app-BJ7g6sa8.js";import{C as i,S as a,n as o,t as s}from"./TextInput-DV7QeRn3.js";import{t as c}from"./PrimaryButton-KeVcwQeg.js";var l=r();function u({mustVerifyEmail:r,status:u,className:d=``}){let f=t().props.auth.user,{data:p,setData:m,patch:h,errors:g,processing:_,recentlySuccessful:v}=e({name:f.name,email:f.email});return(0,l.jsxs)(`section`,{className:d,children:[(0,l.jsxs)(`header`,{children:[(0,l.jsx)(`h2`,{className:`text-lg font-medium text-gray-900`,children:`Profile Information`}),(0,l.jsx)(`p`,{className:`mt-1 text-sm text-gray-600`,children:`Update your account's profile information and email address.`})]}),(0,l.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),h(route(`profile.update`))},className:`mt-6 space-y-6`,children:[(0,l.jsxs)(`div`,{children:[(0,l.jsx)(a,{htmlFor:`name`,value:`Name`}),(0,l.jsx)(s,{id:`name`,className:`mt-1 block w-full`,value:p.name,onChange:e=>m(`name`,e.target.value),required:!0,isFocused:!0,autoComplete:`name`}),(0,l.jsx)(i,{className:`mt-2`,message:g.name})]}),(0,l.jsxs)(`div`,{children:[(0,l.jsx)(a,{htmlFor:`email`,value:`Email`}),(0,l.jsx)(s,{id:`email`,type:`email`,className:`mt-1 block w-full`,value:p.email,onChange:e=>m(`email`,e.target.value),required:!0,autoComplete:`username`}),(0,l.jsx)(i,{className:`mt-2`,message:g.email})]}),r&&f.email_verified_at===null&&(0,l.jsxs)(`div`,{children:[(0,l.jsxs)(`p`,{className:`mt-2 text-sm text-gray-800`,children:[`Your email address is unverified.`,(0,l.jsx)(n,{href:route(`verification.send`),method:`post`,as:`button`,className:`rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2`,children:`Click here to re-send the verification email.`})]}),u===`verification-link-sent`&&(0,l.jsx)(`div`,{className:`mt-2 text-sm font-medium text-green-600`,children:`A new verification link has been sent to your email address.`})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,l.jsx)(c,{disabled:_,children:`Save`}),(0,l.jsx)(o,{show:v,enter:`transition ease-in-out`,enterFrom:`opacity-0`,leave:`transition ease-in-out`,leaveTo:`opacity-0`,children:(0,l.jsx)(`p`,{className:`text-sm text-gray-600`,children:`Saved.`})})]})]})]})}export{u as default};
|
import{a as e,o as t,r as n,t as r}from"./app-CBC6ZGaO.js";import{C as i,S as a,n as o,t as s}from"./TextInput--H1JolRE.js";import{t as c}from"./PrimaryButton-DMaDfcck.js";var l=r();function u({mustVerifyEmail:r,status:u,className:d=``}){let f=t().props.auth.user,{data:p,setData:m,patch:h,errors:g,processing:_,recentlySuccessful:v}=e({name:f.name,email:f.email});return(0,l.jsxs)(`section`,{className:d,children:[(0,l.jsxs)(`header`,{children:[(0,l.jsx)(`h2`,{className:`text-lg font-medium text-gray-900`,children:`Profile Information`}),(0,l.jsx)(`p`,{className:`mt-1 text-sm text-gray-600`,children:`Update your account's profile information and email address.`})]}),(0,l.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),h(route(`profile.update`))},className:`mt-6 space-y-6`,children:[(0,l.jsxs)(`div`,{children:[(0,l.jsx)(a,{htmlFor:`name`,value:`Name`}),(0,l.jsx)(s,{id:`name`,className:`mt-1 block w-full`,value:p.name,onChange:e=>m(`name`,e.target.value),required:!0,isFocused:!0,autoComplete:`name`}),(0,l.jsx)(i,{className:`mt-2`,message:g.name})]}),(0,l.jsxs)(`div`,{children:[(0,l.jsx)(a,{htmlFor:`email`,value:`Email`}),(0,l.jsx)(s,{id:`email`,type:`email`,className:`mt-1 block w-full`,value:p.email,onChange:e=>m(`email`,e.target.value),required:!0,autoComplete:`username`}),(0,l.jsx)(i,{className:`mt-2`,message:g.email})]}),r&&f.email_verified_at===null&&(0,l.jsxs)(`div`,{children:[(0,l.jsxs)(`p`,{className:`mt-2 text-sm text-gray-800`,children:[`Your email address is unverified.`,(0,l.jsx)(n,{href:route(`verification.send`),method:`post`,as:`button`,className:`rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2`,children:`Click here to re-send the verification email.`})]}),u===`verification-link-sent`&&(0,l.jsx)(`div`,{className:`mt-2 text-sm font-medium text-green-600`,children:`A new verification link has been sent to your email address.`})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,l.jsx)(c,{disabled:_,children:`Save`}),(0,l.jsx)(o,{show:v,enter:`transition ease-in-out`,enterFrom:`opacity-0`,leave:`transition ease-in-out`,leaveTo:`opacity-0`,children:(0,l.jsx)(`p`,{className:`text-sm text-gray-600`,children:`Saved.`})})]})]})]})}export{u as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{a as e,c as t,n,r,t as i}from"./app-BJ7g6sa8.js";import{t as a}from"./GuestLayout-CN-YY0cs.js";t();var o=i();function s({status:t}){let{post:i,processing:s}=e({});return(0,o.jsxs)(a,{children:[(0,o.jsx)(n,{title:`Verify email`}),(0,o.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,o.jsx)(`div`,{className:`w-12 h-12 bg-[#3D4E4B]/5 rounded-2xl flex items-center justify-center mb-6`,children:(0,o.jsx)(`svg`,{className:`w-5 h-5 text-[#3D4E4B]`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:(0,o.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z`})})}),(0,o.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Check your email`}),(0,o.jsx)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium leading-relaxed`,children:`We sent a verification link to your email address. Click the link to activate your account.`})]}),t===`verification-link-sent`&&(0,o.jsx)(`div`,{className:`mb-6 px-4 py-3 rounded-xl bg-emerald-50 border border-emerald-100 text-sm font-semibold text-emerald-700 anim-fade`,children:`A new verification link has been sent to your email.`}),(0,o.jsx)(`form`,{onSubmit:e=>{e.preventDefault(),i(route(`verification.send`))},className:`anim-up`,style:{animationDelay:`0.1s`},children:(0,o.jsx)(`button`,{type:`submit`,disabled:s,className:`w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:s?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,o.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,o.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Sending…`]}):`Resend verification email`})}),(0,o.jsx)(`div`,{className:`mt-5 text-center anim-fade`,style:{animationDelay:`0.18s`},children:(0,o.jsx)(r,{href:route(`logout`),method:`post`,as:`button`,className:`text-sm font-semibold text-gray-400 hover:text-[#3D4E4B] transition-colors duration-200`,children:`Sign out`})})]})}export{s as default};
|
import{a as e,c as t,n,r,t as i}from"./app-CBC6ZGaO.js";import{t as a}from"./GuestLayout-DUQXV9II.js";t();var o=i();function s({status:t}){let{post:i,processing:s}=e({});return(0,o.jsxs)(a,{children:[(0,o.jsx)(n,{title:`Verify email`}),(0,o.jsxs)(`div`,{className:`mb-8 anim-down`,children:[(0,o.jsx)(`div`,{className:`w-12 h-12 bg-[#3D4E4B]/5 rounded-2xl flex items-center justify-center mb-6`,children:(0,o.jsx)(`svg`,{className:`w-5 h-5 text-[#3D4E4B]`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:(0,o.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z`})})}),(0,o.jsx)(`h1`,{className:`text-2xl font-bold text-[#1A2421] tracking-tight`,children:`Check your email`}),(0,o.jsx)(`p`,{className:`mt-1.5 text-sm text-gray-400 font-medium leading-relaxed`,children:`We sent a verification link to your email address. Click the link to activate your account.`})]}),t===`verification-link-sent`&&(0,o.jsx)(`div`,{className:`mb-6 px-4 py-3 rounded-xl bg-emerald-50 border border-emerald-100 text-sm font-semibold text-emerald-700 anim-fade`,children:`A new verification link has been sent to your email.`}),(0,o.jsx)(`form`,{onSubmit:e=>{e.preventDefault(),i(route(`verification.send`))},className:`anim-up`,style:{animationDelay:`0.1s`},children:(0,o.jsx)(`button`,{type:`submit`,disabled:s,className:`w-full h-11 rounded-xl bg-[#3D4E4B] hover:bg-[#2D3A38] text-white text-sm font-bold tracking-tight transition-colors duration-200 flex items-center justify-center gap-2 disabled:opacity-60 disabled:cursor-not-allowed`,children:s?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`svg`,{className:`w-4 h-4 animate-spin text-white/60`,fill:`none`,viewBox:`0 0 24 24`,children:[(0,o.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,o.jsx)(`path`,{className:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})]}),`Sending…`]}):`Resend verification email`})}),(0,o.jsx)(`div`,{className:`mt-5 text-center anim-fade`,style:{animationDelay:`0.18s`},children:(0,o.jsx)(r,{href:route(`logout`),method:`post`,as:`button`,className:`text-sm font-semibold text-gray-400 hover:text-[#3D4E4B] transition-colors duration-200`,children:`Sign out`})})]})}export{s as default};
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
|||||||
import{c as e,n as t,t as n}from"./app-BJ7g6sa8.js";e();var r=n();function i({auth:e}){return(0,r.jsxs)(`div`,{className:`min-h-screen bg-[#E3EBE8] text-[#3D4E4B] font-sans`,children:[(0,r.jsx)(t,{title:`Xxx`}),(0,r.jsxs)(`div`,{className:`max-w-7xl mx-auto px-6 py-12`,children:[(0,r.jsx)(`h1`,{className:`text-3xl font-bold mb-8`,children:`Xxx Page`}),(0,r.jsx)(`div`,{className:`bg-white rounded-lg shadow-sm p-6`,children:(0,r.jsx)(`p`,{children:`This is the new xxx page content.`})})]})]})}export{i as default};
|
import{c as e,n as t,t as n}from"./app-CBC6ZGaO.js";e();var r=n();function i({auth:e}){return(0,r.jsxs)(`div`,{className:`min-h-screen bg-[#E3EBE8] text-[#3D4E4B] font-sans`,children:[(0,r.jsx)(t,{title:`Xxx`}),(0,r.jsxs)(`div`,{className:`max-w-7xl mx-auto px-6 py-12`,children:[(0,r.jsx)(`h1`,{className:`text-3xl font-bold mb-8`,children:`Xxx Page`}),(0,r.jsx)(`div`,{className:`bg-white rounded-lg shadow-sm p-6`,children:(0,r.jsx)(`p`,{children:`This is the new xxx page content.`})})]})]})}export{i as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
import{d as e,u as t}from"./app-BJ7g6sa8.js";var n=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self,n.Sweetalert2=r())})(e,(function(){function e(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function t(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function n(t,n){return t.get(e(t,n))}function r(e,n,r){t(e,n),n.set(e,r)}function i(t,n,r){return t.set(e(t,n),r),r}let a={},o=()=>{a.previousActiveElement instanceof HTMLElement?(a.previousActiveElement.focus(),a.previousActiveElement=null):document.body&&document.body.focus()},s=e=>new Promise(t=>{if(!e)return t();let n=window.scrollX,r=window.scrollY;a.restoreFocusTimeout=setTimeout(()=>{o(),t()},100),window.scrollTo(n,r)}),ee=`swal2-`,c=`container.shown.height-auto.iosfix.popup.modal.no-backdrop.no-transition.toast.toast-shown.show.hide.close.title.html-container.actions.confirm.deny.cancel.footer.icon.icon-content.image.input.file.range.select.radio.checkbox.label.textarea.inputerror.input-label.validation-message.progress-steps.active-progress-step.progress-step.progress-step-line.loader.loading.styled.top.top-start.top-end.top-left.top-right.center.center-start.center-end.center-left.center-right.bottom.bottom-start.bottom-end.bottom-left.bottom-right.grow-row.grow-column.grow-fullscreen.rtl.timer-progress-bar.timer-progress-bar-container.scrollbar-measure.icon-success.icon-warning.icon-info.icon-question.icon-error.draggable.dragging`.split(`.`).reduce((e,t)=>(e[t]=ee+t,e),{}),l=[`success`,`warning`,`info`,`question`,`error`].reduce((e,t)=>(e[t]=ee+t,e),{}),te=`SweetAlert2:`,ne=e=>e.charAt(0).toUpperCase()+e.slice(1),u=e=>{console.warn(`${te} ${typeof e==`object`?e.join(` `):e}`)},d=e=>{console.error(`${te} ${e}`)},re=[],ie=e=>{re.includes(e)||(re.push(e),u(e))},ae=(e,t=null)=>{ie(`"${e}" is deprecated and will be removed in the next major release.${t?` Use "${t}" instead.`:``}`)},oe=e=>typeof e==`function`?e():e,se=e=>e&&typeof e.toPromise==`function`,f=e=>se(e)?e.toPromise():Promise.resolve(e),ce=e=>e&&Promise.resolve(e)===e,le=()=>navigator.userAgent.includes(`Firefox`),p=()=>document.body.querySelector(`.${c.container}`),m=e=>{let t=p();return t?t.querySelector(e):null},h=e=>m(`.${e}`),g=()=>h(c.popup),_=()=>h(c.icon),ue=()=>h(c[`icon-content`]),de=()=>h(c.title),fe=()=>h(c[`html-container`]),pe=()=>h(c.image),me=()=>h(c[`progress-steps`]),he=()=>h(c[`validation-message`]),v=()=>m(`.${c.actions} .${c.confirm}`),y=()=>m(`.${c.actions} .${c.cancel}`),b=()=>m(`.${c.actions} .${c.deny}`),ge=()=>h(c[`input-label`]),x=()=>m(`.${c.loader}`),S=()=>h(c.actions),_e=()=>h(c.footer),ve=()=>h(c[`timer-progress-bar`]),ye=()=>h(c.close),be=()=>{let e=g();if(!e)return[];let t=e.querySelectorAll(`[tabindex]:not([tabindex="-1"]):not([tabindex="0"])`),n=Array.from(t).sort((e,t)=>{let n=parseInt(e.getAttribute(`tabindex`)||`0`),r=parseInt(t.getAttribute(`tabindex`)||`0`);return n>r?1:n<r?-1:0}),r=e.querySelectorAll(`
|
import{d as e,u as t}from"./app-CBC6ZGaO.js";var n=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self,n.Sweetalert2=r())})(e,(function(){function e(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function t(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function n(t,n){return t.get(e(t,n))}function r(e,n,r){t(e,n),n.set(e,r)}function i(t,n,r){return t.set(e(t,n),r),r}let a={},o=()=>{a.previousActiveElement instanceof HTMLElement?(a.previousActiveElement.focus(),a.previousActiveElement=null):document.body&&document.body.focus()},s=e=>new Promise(t=>{if(!e)return t();let n=window.scrollX,r=window.scrollY;a.restoreFocusTimeout=setTimeout(()=>{o(),t()},100),window.scrollTo(n,r)}),ee=`swal2-`,c=`container.shown.height-auto.iosfix.popup.modal.no-backdrop.no-transition.toast.toast-shown.show.hide.close.title.html-container.actions.confirm.deny.cancel.footer.icon.icon-content.image.input.file.range.select.radio.checkbox.label.textarea.inputerror.input-label.validation-message.progress-steps.active-progress-step.progress-step.progress-step-line.loader.loading.styled.top.top-start.top-end.top-left.top-right.center.center-start.center-end.center-left.center-right.bottom.bottom-start.bottom-end.bottom-left.bottom-right.grow-row.grow-column.grow-fullscreen.rtl.timer-progress-bar.timer-progress-bar-container.scrollbar-measure.icon-success.icon-warning.icon-info.icon-question.icon-error.draggable.dragging`.split(`.`).reduce((e,t)=>(e[t]=ee+t,e),{}),l=[`success`,`warning`,`info`,`question`,`error`].reduce((e,t)=>(e[t]=ee+t,e),{}),te=`SweetAlert2:`,ne=e=>e.charAt(0).toUpperCase()+e.slice(1),u=e=>{console.warn(`${te} ${typeof e==`object`?e.join(` `):e}`)},d=e=>{console.error(`${te} ${e}`)},re=[],ie=e=>{re.includes(e)||(re.push(e),u(e))},ae=(e,t=null)=>{ie(`"${e}" is deprecated and will be removed in the next major release.${t?` Use "${t}" instead.`:``}`)},oe=e=>typeof e==`function`?e():e,se=e=>e&&typeof e.toPromise==`function`,f=e=>se(e)?e.toPromise():Promise.resolve(e),ce=e=>e&&Promise.resolve(e)===e,le=()=>navigator.userAgent.includes(`Firefox`),p=()=>document.body.querySelector(`.${c.container}`),m=e=>{let t=p();return t?t.querySelector(e):null},h=e=>m(`.${e}`),g=()=>h(c.popup),_=()=>h(c.icon),ue=()=>h(c[`icon-content`]),de=()=>h(c.title),fe=()=>h(c[`html-container`]),pe=()=>h(c.image),me=()=>h(c[`progress-steps`]),he=()=>h(c[`validation-message`]),v=()=>m(`.${c.actions} .${c.confirm}`),y=()=>m(`.${c.actions} .${c.cancel}`),b=()=>m(`.${c.actions} .${c.deny}`),ge=()=>h(c[`input-label`]),x=()=>m(`.${c.loader}`),S=()=>h(c.actions),_e=()=>h(c.footer),ve=()=>h(c[`timer-progress-bar`]),ye=()=>h(c.close),be=()=>{let e=g();if(!e)return[];let t=e.querySelectorAll(`[tabindex]:not([tabindex="-1"]):not([tabindex="0"])`),n=Array.from(t).sort((e,t)=>{let n=parseInt(e.getAttribute(`tabindex`)||`0`),r=parseInt(t.getAttribute(`tabindex`)||`0`);return n>r?1:n<r?-1:0}),r=e.querySelectorAll(`
|
||||||
a[href],
|
a[href],
|
||||||
area[href],
|
area[href],
|
||||||
input:not([disabled]),
|
input:not([disabled]),
|
||||||
+83
-83
@@ -1,48 +1,48 @@
|
|||||||
{
|
{
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js": {
|
"_AuthenticatedLayout-DI4WLw0Y.js": {
|
||||||
"file": "assets/AuthenticatedLayout-CrB9BCoI.js",
|
"file": "assets/AuthenticatedLayout-DI4WLw0Y.js",
|
||||||
"name": "AuthenticatedLayout",
|
"name": "AuthenticatedLayout",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_Can-DIOq7dyw.js": {
|
"_Can-B4U9XlNZ.js": {
|
||||||
"file": "assets/Can-DIOq7dyw.js",
|
"file": "assets/Can-B4U9XlNZ.js",
|
||||||
"name": "Can",
|
"name": "Can",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_GuestLayout-CN-YY0cs.js": {
|
"_GuestLayout-DUQXV9II.js": {
|
||||||
"file": "assets/GuestLayout-CN-YY0cs.js",
|
"file": "assets/GuestLayout-DUQXV9II.js",
|
||||||
"name": "GuestLayout",
|
"name": "GuestLayout",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_Portal-DJbp1s68.js": {
|
"_Portal-DJRNWzaL.js": {
|
||||||
"file": "assets/Portal-DJbp1s68.js",
|
"file": "assets/Portal-DJRNWzaL.js",
|
||||||
"name": "Portal",
|
"name": "Portal",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_PrimaryButton-KeVcwQeg.js": {
|
"_PrimaryButton-DMaDfcck.js": {
|
||||||
"file": "assets/PrimaryButton-KeVcwQeg.js",
|
"file": "assets/PrimaryButton-DMaDfcck.js",
|
||||||
"name": "PrimaryButton",
|
"name": "PrimaryButton",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_TextInput-DV7QeRn3.js": {
|
"_TextInput--H1JolRE.js": {
|
||||||
"file": "assets/TextInput-DV7QeRn3.js",
|
"file": "assets/TextInput--H1JolRE.js",
|
||||||
"name": "TextInput",
|
"name": "TextInput",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_filepond-plugin-file-validate-type-CBUe71W_.js": {
|
"_filepond-plugin-file-validate-type-Bm_JOscj.js": {
|
||||||
"file": "assets/filepond-plugin-file-validate-type-CBUe71W_.js",
|
"file": "assets/filepond-plugin-file-validate-type-Bm_JOscj.js",
|
||||||
"name": "filepond-plugin-file-validate-type",
|
"name": "filepond-plugin-file-validate-type",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
@@ -55,15 +55,15 @@
|
|||||||
"file": "assets/filepond-plugin-file-validate-type-CEtEkCs1.css",
|
"file": "assets/filepond-plugin-file-validate-type-CEtEkCs1.css",
|
||||||
"src": "_filepond-plugin-file-validate-type-CEtEkCs1.css"
|
"src": "_filepond-plugin-file-validate-type-CEtEkCs1.css"
|
||||||
},
|
},
|
||||||
"_lodash-ZrZcSXd_.js": {
|
"_lodash-LlLUQFZC.js": {
|
||||||
"file": "assets/lodash-ZrZcSXd_.js",
|
"file": "assets/lodash-LlLUQFZC.js",
|
||||||
"name": "lodash",
|
"name": "lodash",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_swal-DZXjpqDE.js": {
|
"_swal-ClfUb7Hm.js": {
|
||||||
"file": "assets/swal-DZXjpqDE.js",
|
"file": "assets/swal-ClfUb7Hm.js",
|
||||||
"name": "swal",
|
"name": "swal",
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx"
|
"resources/js/app.tsx"
|
||||||
@@ -77,99 +77,99 @@
|
|||||||
"src": "_swal-DtpL8WXZ.css"
|
"src": "_swal-DtpL8WXZ.css"
|
||||||
},
|
},
|
||||||
"resources/js/Pages/ActivityLogs/Index.tsx": {
|
"resources/js/Pages/ActivityLogs/Index.tsx": {
|
||||||
"file": "assets/Index-Cm49_1vz.js",
|
"file": "assets/Index-D9_r9v0x.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/ActivityLogs/Index.tsx",
|
"src": "resources/js/Pages/ActivityLogs/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_lodash-ZrZcSXd_.js",
|
"_lodash-LlLUQFZC.js",
|
||||||
"_Portal-DJbp1s68.js",
|
"_Portal-DJRNWzaL.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Auth/ConfirmPassword.tsx": {
|
"resources/js/Pages/Auth/ConfirmPassword.tsx": {
|
||||||
"file": "assets/ConfirmPassword-Ducw29r7.js",
|
"file": "assets/ConfirmPassword-DrcXbtHq.js",
|
||||||
"name": "ConfirmPassword",
|
"name": "ConfirmPassword",
|
||||||
"src": "resources/js/Pages/Auth/ConfirmPassword.tsx",
|
"src": "resources/js/Pages/Auth/ConfirmPassword.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_GuestLayout-CN-YY0cs.js"
|
"_GuestLayout-DUQXV9II.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Auth/ForgotPassword.tsx": {
|
"resources/js/Pages/Auth/ForgotPassword.tsx": {
|
||||||
"file": "assets/ForgotPassword-BmQrO4Bp.js",
|
"file": "assets/ForgotPassword-iOghYKk1.js",
|
||||||
"name": "ForgotPassword",
|
"name": "ForgotPassword",
|
||||||
"src": "resources/js/Pages/Auth/ForgotPassword.tsx",
|
"src": "resources/js/Pages/Auth/ForgotPassword.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_GuestLayout-CN-YY0cs.js"
|
"_GuestLayout-DUQXV9II.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Auth/Login.tsx": {
|
"resources/js/Pages/Auth/Login.tsx": {
|
||||||
"file": "assets/Login-DUDEFmAx.js",
|
"file": "assets/Login-DEf6GiBL.js",
|
||||||
"name": "Login",
|
"name": "Login",
|
||||||
"src": "resources/js/Pages/Auth/Login.tsx",
|
"src": "resources/js/Pages/Auth/Login.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_GuestLayout-CN-YY0cs.js"
|
"_GuestLayout-DUQXV9II.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Auth/Register.tsx": {
|
"resources/js/Pages/Auth/Register.tsx": {
|
||||||
"file": "assets/Register-BscYc22x.js",
|
"file": "assets/Register-qd5-M6ei.js",
|
||||||
"name": "Register",
|
"name": "Register",
|
||||||
"src": "resources/js/Pages/Auth/Register.tsx",
|
"src": "resources/js/Pages/Auth/Register.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_GuestLayout-CN-YY0cs.js"
|
"_GuestLayout-DUQXV9II.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Auth/ResetPassword.tsx": {
|
"resources/js/Pages/Auth/ResetPassword.tsx": {
|
||||||
"file": "assets/ResetPassword-BTTfjVJh.js",
|
"file": "assets/ResetPassword-yn7YFp-y.js",
|
||||||
"name": "ResetPassword",
|
"name": "ResetPassword",
|
||||||
"src": "resources/js/Pages/Auth/ResetPassword.tsx",
|
"src": "resources/js/Pages/Auth/ResetPassword.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_GuestLayout-CN-YY0cs.js"
|
"_GuestLayout-DUQXV9II.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Auth/VerifyEmail.tsx": {
|
"resources/js/Pages/Auth/VerifyEmail.tsx": {
|
||||||
"file": "assets/VerifyEmail-rqxgUqlx.js",
|
"file": "assets/VerifyEmail-BFOE_wr5.js",
|
||||||
"name": "VerifyEmail",
|
"name": "VerifyEmail",
|
||||||
"src": "resources/js/Pages/Auth/VerifyEmail.tsx",
|
"src": "resources/js/Pages/Auth/VerifyEmail.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_GuestLayout-CN-YY0cs.js"
|
"_GuestLayout-DUQXV9II.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Dashboard.tsx": {
|
"resources/js/Pages/Dashboard.tsx": {
|
||||||
"file": "assets/Dashboard-DZOwY3RZ.js",
|
"file": "assets/Dashboard-TCrsNPIF.js",
|
||||||
"name": "Dashboard",
|
"name": "Dashboard",
|
||||||
"src": "resources/js/Pages/Dashboard.tsx",
|
"src": "resources/js/Pages/Dashboard.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Docs/Index.tsx": {
|
"resources/js/Pages/Docs/Index.tsx": {
|
||||||
"file": "assets/Index-CgghpLIe.js",
|
"file": "assets/Index-BtuMIlrp.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/Docs/Index.tsx",
|
"src": "resources/js/Pages/Docs/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Errors/Error.tsx": {
|
"resources/js/Pages/Errors/Error.tsx": {
|
||||||
"file": "assets/Error-rwcY_Rc-.js",
|
"file": "assets/Error-BNxSWMq-.js",
|
||||||
"name": "Error",
|
"name": "Error",
|
||||||
"src": "resources/js/Pages/Errors/Error.tsx",
|
"src": "resources/js/Pages/Errors/Error.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -178,99 +178,99 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Notifications/Index.tsx": {
|
"resources/js/Pages/Notifications/Index.tsx": {
|
||||||
"file": "assets/Index-DLpY0zj1.js",
|
"file": "assets/Index-C7twDNCh.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/Notifications/Index.tsx",
|
"src": "resources/js/Pages/Notifications/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Profile/Edit.tsx": {
|
"resources/js/Pages/Profile/Edit.tsx": {
|
||||||
"file": "assets/Edit-BCh5fCTK.js",
|
"file": "assets/Edit-DtBBQL0C.js",
|
||||||
"name": "Edit",
|
"name": "Edit",
|
||||||
"src": "resources/js/Pages/Profile/Edit.tsx",
|
"src": "resources/js/Pages/Profile/Edit.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_filepond-plugin-file-validate-type-CBUe71W_.js",
|
"_filepond-plugin-file-validate-type-Bm_JOscj.js",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Profile/Partials/DeleteUserForm.tsx": {
|
"resources/js/Pages/Profile/Partials/DeleteUserForm.tsx": {
|
||||||
"file": "assets/DeleteUserForm-DLkG3tvo.js",
|
"file": "assets/DeleteUserForm-CsCxb3Is.js",
|
||||||
"name": "DeleteUserForm",
|
"name": "DeleteUserForm",
|
||||||
"src": "resources/js/Pages/Profile/Partials/DeleteUserForm.tsx",
|
"src": "resources/js/Pages/Profile/Partials/DeleteUserForm.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_TextInput-DV7QeRn3.js"
|
"_TextInput--H1JolRE.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Profile/Partials/UpdatePasswordForm.tsx": {
|
"resources/js/Pages/Profile/Partials/UpdatePasswordForm.tsx": {
|
||||||
"file": "assets/UpdatePasswordForm-DXZy5eGn.js",
|
"file": "assets/UpdatePasswordForm-CdprBtNO.js",
|
||||||
"name": "UpdatePasswordForm",
|
"name": "UpdatePasswordForm",
|
||||||
"src": "resources/js/Pages/Profile/Partials/UpdatePasswordForm.tsx",
|
"src": "resources/js/Pages/Profile/Partials/UpdatePasswordForm.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_TextInput-DV7QeRn3.js",
|
"_TextInput--H1JolRE.js",
|
||||||
"_PrimaryButton-KeVcwQeg.js"
|
"_PrimaryButton-DMaDfcck.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.tsx": {
|
"resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.tsx": {
|
||||||
"file": "assets/UpdateProfileInformationForm-CZPCM5rZ.js",
|
"file": "assets/UpdateProfileInformationForm-x_xz6hYY.js",
|
||||||
"name": "UpdateProfileInformationForm",
|
"name": "UpdateProfileInformationForm",
|
||||||
"src": "resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.tsx",
|
"src": "resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_TextInput-DV7QeRn3.js",
|
"_TextInput--H1JolRE.js",
|
||||||
"_PrimaryButton-KeVcwQeg.js"
|
"_PrimaryButton-DMaDfcck.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Roles/Index.tsx": {
|
"resources/js/Pages/Roles/Index.tsx": {
|
||||||
"file": "assets/Index-Bnf5l0xj.js",
|
"file": "assets/Index-DpI3WTvv.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/Roles/Index.tsx",
|
"src": "resources/js/Pages/Roles/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_Can-DIOq7dyw.js",
|
"_Can-B4U9XlNZ.js",
|
||||||
"_Portal-DJbp1s68.js",
|
"_Portal-DJRNWzaL.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Settings/Index.tsx": {
|
"resources/js/Pages/Settings/Index.tsx": {
|
||||||
"file": "assets/Index-z4H1ItiM.js",
|
"file": "assets/Index-DAQoqCgq.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/Settings/Index.tsx",
|
"src": "resources/js/Pages/Settings/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_filepond-plugin-file-validate-type-CBUe71W_.js",
|
"_filepond-plugin-file-validate-type-Bm_JOscj.js",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/SystemSettings/Index.tsx": {
|
"resources/js/Pages/SystemSettings/Index.tsx": {
|
||||||
"file": "assets/Index-A9YntmU6.js",
|
"file": "assets/Index-LTuEHoHq.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/SystemSettings/Index.tsx",
|
"src": "resources/js/Pages/SystemSettings/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_filepond-plugin-file-validate-type-CBUe71W_.js",
|
"_filepond-plugin-file-validate-type-Bm_JOscj.js",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/TwoFactor/Challenge.tsx": {
|
"resources/js/Pages/TwoFactor/Challenge.tsx": {
|
||||||
"file": "assets/Challenge-DaBnX94x.js",
|
"file": "assets/Challenge-c9X8OgcQ.js",
|
||||||
"name": "Challenge",
|
"name": "Challenge",
|
||||||
"src": "resources/js/Pages/TwoFactor/Challenge.tsx",
|
"src": "resources/js/Pages/TwoFactor/Challenge.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -279,42 +279,42 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/TwoFactor/Setup.tsx": {
|
"resources/js/Pages/TwoFactor/Setup.tsx": {
|
||||||
"file": "assets/Setup-ZspLG92f.js",
|
"file": "assets/Setup-DtB1W1gN.js",
|
||||||
"name": "Setup",
|
"name": "Setup",
|
||||||
"src": "resources/js/Pages/TwoFactor/Setup.tsx",
|
"src": "resources/js/Pages/TwoFactor/Setup.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Users/Index.tsx": {
|
"resources/js/Pages/Users/Index.tsx": {
|
||||||
"file": "assets/Index-cmCbZg8n.js",
|
"file": "assets/Index-vfgoW_YL.js",
|
||||||
"name": "Index",
|
"name": "Index",
|
||||||
"src": "resources/js/Pages/Users/Index.tsx",
|
"src": "resources/js/Pages/Users/Index.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_lodash-ZrZcSXd_.js",
|
"_lodash-LlLUQFZC.js",
|
||||||
"_swal-DZXjpqDE.js",
|
"_swal-ClfUb7Hm.js",
|
||||||
"_Can-DIOq7dyw.js",
|
"_Can-B4U9XlNZ.js",
|
||||||
"_Portal-DJbp1s68.js",
|
"_Portal-DJRNWzaL.js",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Users/Show.tsx": {
|
"resources/js/Pages/Users/Show.tsx": {
|
||||||
"file": "assets/Show-lMRyP8VR.js",
|
"file": "assets/Show-Bb6wuATu.js",
|
||||||
"name": "Show",
|
"name": "Show",
|
||||||
"src": "resources/js/Pages/Users/Show.tsx",
|
"src": "resources/js/Pages/Users/Show.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"resources/js/app.tsx",
|
"resources/js/app.tsx",
|
||||||
"_AuthenticatedLayout-CrB9BCoI.js"
|
"_AuthenticatedLayout-DI4WLw0Y.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Welcome.tsx": {
|
"resources/js/Pages/Welcome.tsx": {
|
||||||
"file": "assets/Welcome-CDP6Hme4.js",
|
"file": "assets/Welcome-Sa40wPkZ.js",
|
||||||
"name": "Welcome",
|
"name": "Welcome",
|
||||||
"src": "resources/js/Pages/Welcome.tsx",
|
"src": "resources/js/Pages/Welcome.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/Pages/Xxx.tsx": {
|
"resources/js/Pages/Xxx.tsx": {
|
||||||
"file": "assets/Xxx-CagXuP8t.js",
|
"file": "assets/Xxx-NxSPHpxI.js",
|
||||||
"name": "Xxx",
|
"name": "Xxx",
|
||||||
"src": "resources/js/Pages/Xxx.tsx",
|
"src": "resources/js/Pages/Xxx.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
@@ -332,7 +332,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resources/js/app.tsx": {
|
"resources/js/app.tsx": {
|
||||||
"file": "assets/app-BJ7g6sa8.js",
|
"file": "assets/app-CBC6ZGaO.js",
|
||||||
"name": "app",
|
"name": "app",
|
||||||
"src": "resources/js/app.tsx",
|
"src": "resources/js/app.tsx",
|
||||||
"isEntry": true,
|
"isEntry": true,
|
||||||
@@ -363,7 +363,7 @@
|
|||||||
"resources/js/Pages/Xxx.tsx"
|
"resources/js/Pages/Xxx.tsx"
|
||||||
],
|
],
|
||||||
"css": [
|
"css": [
|
||||||
"assets/app-Bu4ihmu3.css"
|
"assets/app-CgPzmd0h.css"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
http://localhost:5173
|
||||||
@@ -1,169 +1,247 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# --- Color Definitions for Premium Look ---
|
# --- Color Definitions for Premium Terminal Styling ---
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
CYAN='\033[0;36m'
|
CYAN='\033[0;36m'
|
||||||
WHITE='\033[1;37m'
|
MAGENTA='\033[0;35m'
|
||||||
BOLD='\033[1m'
|
BOLD='\033[1m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
echo -e "${CYAN}======================================================${NC}"
|
# Helper Functions for Clean Output
|
||||||
echo -e "${GREEN}${BOLD} 🐳 Biiproject Kit v2 — Docker Runtime Engine 🐳 ${NC}"
|
log_info() {
|
||||||
echo -e "${CYAN}======================================================${NC}"
|
echo -e " ${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
# 1. Pre-flight Checks
|
log_success() {
|
||||||
echo -e "${CYAN}[1/6] Checking system environment...${NC}"
|
echo -e " ${GREEN}[SUCCESS]${NC} ✔ $1"
|
||||||
if ! command -v docker &> /dev/null; then
|
}
|
||||||
echo -e " ${RED}❌ Error: Docker is not installed on this system.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! docker info &> /dev/null; then
|
log_warning() {
|
||||||
echo -e " ${RED}❌ Error: Docker daemon is not running.${NC}"
|
echo -e " ${YELLOW}[WARNING]${NC} ⚠ $1"
|
||||||
exit 1
|
}
|
||||||
fi
|
|
||||||
echo -e " ${GREEN}✔ Docker is installed and running perfectly.${NC}"
|
log_error() {
|
||||||
|
echo -e " ${RED}[ERROR]${NC} ✘ $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_screen() {
|
||||||
|
clear 2>/dev/null || printf "\033c"
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_screen
|
||||||
|
|
||||||
|
# Premium Welcome Header
|
||||||
|
echo -e "${BLUE}======================================================================${NC}"
|
||||||
|
echo -e "${BOLD}${GREEN} 🐳 BIIPROJECT KIT V2 - CONTAINERIZED RUNNER & MONITOR 🐳 ${NC}"
|
||||||
|
echo -e "${BLUE}======================================================================${NC}"
|
||||||
|
echo -e " Skrip ini akan memvalidasi port, menyalakan container Docker,"
|
||||||
|
echo -e " dan mengaktifkan server pengembangan frontend otomatis."
|
||||||
|
echo -e "${BLUE}======================================================================${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 2. Port & Container Conflicts Resolution (Self-Healing)
|
# 1. VERIFY INSTALLATION STATE
|
||||||
echo -e "${CYAN}[2/6] Preventing port and container name conflicts...${NC}"
|
echo -e "${BOLD}${BLUE}[1/5] Memverifikasi Status Instalasi Aplikasi...${NC}"
|
||||||
|
|
||||||
# Resolve ports dynamically
|
# Check for .env file
|
||||||
PORT_8000=$(grep "^APP_PORT=" .env 2>/dev/null | cut -d'=' -f2- | tr -d '"'\''')
|
if [ ! -f .env ]; then
|
||||||
PORT_8000=${PORT_8000:-8000}
|
log_warning "File konfigurasi '.env' tidak ditemukan."
|
||||||
|
log_info "Menjalankan skrip instalasi terlebih dahulu..."
|
||||||
|
sleep 1.5
|
||||||
|
if [ -f install.sh ]; then
|
||||||
|
chmod +x install.sh
|
||||||
|
./install.sh
|
||||||
|
exit $?
|
||||||
|
else
|
||||||
|
log_error "Skrip install.sh tidak ditemukan!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
PORT_5432=$(grep -E "^(FORWARD_DB_PORT|DB_PORT)=" .env 2>/dev/null | head -n1 | cut -d'=' -f2- | tr -d '"'\''')
|
# Check for Composer dependencies
|
||||||
PORT_5432=${PORT_5432:-5432}
|
if [ ! -d vendor ] || [ ! -d node_modules ]; then
|
||||||
|
log_warning "Dependensi aplikasi belum lengkap (vendor atau node_modules hilang)."
|
||||||
|
log_info "Mengalihkan ke skrip instalasi untuk setup awal..."
|
||||||
|
sleep 2
|
||||||
|
if [ -f install.sh ]; then
|
||||||
|
chmod +x install.sh
|
||||||
|
./install.sh
|
||||||
|
exit $?
|
||||||
|
else
|
||||||
|
log_error "Skrip install.sh tidak ditemukan!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
PORT_6379=$(grep -E "^(FORWARD_REDIS_PORT|REDIS_PORT)=" .env 2>/dev/null | head -n1 | cut -d'=' -f2- | tr -d '"'\''')
|
# Check Docker Installation
|
||||||
PORT_6379=${PORT_6379:-6379}
|
if ! command -v docker &> /dev/null; then
|
||||||
|
log_error "Docker tidak ditemukan pada sistem. Harap instal Docker terlebih dahulu."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Kill local system processes occupying these ports
|
# Check Docker Daemon
|
||||||
|
if ! docker info &> /dev/null; then
|
||||||
|
log_error "Docker daemon tidak aktif. Harap jalankan layanan Docker Anda."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Resolve Docker Compose Command
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
DOCKER_COMPOSE_CMD="docker compose"
|
||||||
|
else
|
||||||
|
DOCKER_COMPOSE_CMD="docker-compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "Sistem siap dijalankan."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. RESOLVE PORTS & PREVENT CONFLICTS
|
||||||
|
echo -e "${BOLD}${BLUE}[2/5] Memeriksa Port Bebas & Konflik Container...${NC}"
|
||||||
|
|
||||||
|
# Parse ports from .env
|
||||||
|
APP_PORT=$(grep "^APP_PORT=" .env | cut -d'=' -f2- | tr -d '"'\''')
|
||||||
|
APP_PORT=${APP_PORT:-8000}
|
||||||
|
|
||||||
|
DB_PORT=$(grep -E "^(FORWARD_DB_PORT|DB_PORT)=" .env | head -n1 | cut -d'=' -f2- | tr -d '"'\''')
|
||||||
|
DB_PORT=${DB_PORT:-5432}
|
||||||
|
|
||||||
|
REDIS_PORT=$(grep -E "^(FORWARD_REDIS_PORT|REDIS_PORT)=" .env | head -n1 | cut -d'=' -f2- | tr -d '"'\''')
|
||||||
|
REDIS_PORT=${REDIS_PORT:-6379}
|
||||||
|
|
||||||
|
# Function to stop conflicting containers on a specific port
|
||||||
|
stop_conflict_on_port() {
|
||||||
|
local port=$1
|
||||||
|
local service_name=$2
|
||||||
|
local conflicting_container=$(docker ps --filter "publish=$port" --format "{{.Names}}" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ ! -z "$conflicting_container" ]; then
|
||||||
|
# Exclude our own kit containers
|
||||||
|
if [[ "$conflicting_container" != "bii-web" && "$conflicting_container" != "bii-pgsql" && "$conflicting_container" != "bii-redis" ]]; then
|
||||||
|
log_warning "Port $port ($service_name) digunakan oleh container '$conflicting_container'."
|
||||||
|
log_info "Menghentikan container '$conflicting_container' untuk menghindari konflik..."
|
||||||
|
docker stop "$conflicting_container" &>/dev/null
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Stop local processes using fuser/lsof if available
|
||||||
if command -v lsof &>/dev/null && command -v fuser &>/dev/null; then
|
if command -v lsof &>/dev/null && command -v fuser &>/dev/null; then
|
||||||
for port in "$PORT_8000" "$PORT_5432" "$PORT_6379"; do
|
for port in "$APP_PORT" "$DB_PORT" "$REDIS_PORT"; do
|
||||||
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then
|
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then
|
||||||
echo -e " ${YELLOW}⚠ Port $port is occupied locally. Freeing up port $port...${NC}"
|
log_warning "Port $port digunakan oleh proses lokal. Menghentikan proses..."
|
||||||
fuser -k $port/tcp 2>/dev/null
|
fuser -k $port/tcp 2>/dev/null
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Scan and remove conflicting stopped containers with same names
|
stop_conflict_on_port "$APP_PORT" "Web Aplikasi"
|
||||||
CONFLICT_CONTAINERS=("bii-kit-web" "bii-kit-pgsql" "bii-kit-redis")
|
stop_conflict_on_port "$DB_PORT" "Database PostgreSQL"
|
||||||
for container in "${CONFLICT_CONTAINERS[@]}"; do
|
stop_conflict_on_port "$REDIS_PORT" "Redis Cache"
|
||||||
if [ ! -z "$(docker ps -a -q -f name=^/${container}$ 2>/dev/null)" ]; then
|
|
||||||
# Check if container is running
|
log_success "Port $APP_PORT (Web), $DB_PORT (DB), dan $REDIS_PORT (Redis) siap digunakan."
|
||||||
if [ ! -z "$(docker ps -q -f name=^/${container}$ 2>/dev/null)" ]; then
|
|
||||||
echo -ne " ${YELLOW}Stopping conflicting running container: $container...${NC}"
|
|
||||||
docker stop "$container" &>/dev/null
|
|
||||||
fi
|
|
||||||
echo -ne " ${YELLOW}Removing conflicting container $container to avoid duplication...${NC}"
|
|
||||||
docker rm -f "$container" &>/dev/null
|
|
||||||
echo -e "\r ${GREEN}✔ Cleared conflicting container: $container. ${NC}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo -e " ${GREEN}✔ Environment conflicts resolved successfully.${NC}"
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 3. Booting Docker Compose Stack
|
# 3. START DOCKER CONTAINER STACK
|
||||||
echo -e "${CYAN}[3/6] Starting application containers...${NC}"
|
echo -e "${BOLD}${BLUE}[3/5] Mengaktifkan Container Docker (Sail)...${NC}"
|
||||||
docker compose up -d
|
$DOCKER_COMPOSE_CMD up -d
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo -e " ${RED}❌ Error: Failed to start containers. Try running: docker compose down && docker compose up -d${NC}"
|
log_error "Gagal menyalakan Docker containers."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo -e " ${GREEN}✔ Containers booted successfully.${NC}"
|
log_success "Docker containers berhasil dinyalakan."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 4. Service Health Check & Permissions Correction
|
# 4. HEALTH CHECK & PERMISSIONS
|
||||||
echo -e "${CYAN}[4/6] Waiting for database health & setting permissions...${NC}"
|
echo -e "${BOLD}${BLUE}[4/5] Memvalidasi Kesehatan Layanan & Hak Akses...${NC}"
|
||||||
|
|
||||||
DB_CONTAINER="bii-kit-pgsql"
|
DB_CONTAINER="bii-kit-pgsql"
|
||||||
REDIS_CONTAINER="bii-kit-redis"
|
REDIS_CONTAINER="bii-kit-redis"
|
||||||
|
|
||||||
echo -ne " ${YELLOW}Checking PostgreSQL database ($DB_CONTAINER)...${NC}"
|
# Postgres Check
|
||||||
|
echo -ne " ${YELLOW}Memeriksa PostgreSQL Database ($DB_CONTAINER)...${NC}"
|
||||||
RETRIES=0
|
RETRIES=0
|
||||||
MAX_RETRIES=40
|
MAX_RETRIES=30
|
||||||
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
||||||
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$DB_CONTAINER" 2>/dev/null)
|
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$DB_CONTAINER" 2>/dev/null)
|
||||||
if [ "$STATUS" = "healthy" ]; then
|
if [ "$STATUS" = "healthy" ]; then
|
||||||
echo -e "\r ${GREEN}✔ PostgreSQL is healthy and ready to accept connections! ${NC}"
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ PostgreSQL sehat dan siap! "
|
||||||
break
|
|
||||||
elif [ "$STATUS" = "unhealthy" ]; then
|
|
||||||
echo -e "\r ${RED}⚠ PostgreSQL health check failed. Proceeding... ${NC}"
|
|
||||||
break
|
break
|
||||||
elif [ -z "$STATUS" ]; then
|
elif [ -z "$STATUS" ]; then
|
||||||
RUNNING=$(docker inspect --format='{{.State.Running}}' "$DB_CONTAINER" 2>/dev/null)
|
RUNNING=$(docker inspect --format='{{.State.Running}}' "$DB_CONTAINER" 2>/dev/null)
|
||||||
if [ "$RUNNING" = "true" ]; then
|
if [ "$RUNNING" = "true" ]; then
|
||||||
echo -e "\r ${GREEN}✔ PostgreSQL is running (no healthcheck defined). ${NC}"
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ PostgreSQL container aktif. "
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo -n "."
|
echo -n "."
|
||||||
sleep 1.5
|
sleep 1.2
|
||||||
RETRIES=$((RETRIES + 1))
|
RETRIES=$((RETRIES + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
echo -ne " ${YELLOW}Checking Redis cache ($REDIS_CONTAINER)...${NC}"
|
# Redis Check
|
||||||
|
echo -ne " ${YELLOW}Memeriksa Redis Cache ($REDIS_CONTAINER)...${NC}"
|
||||||
RETRIES=0
|
RETRIES=0
|
||||||
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
while [ $RETRIES -lt $MAX_RETRIES ]; do
|
||||||
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$REDIS_CONTAINER" 2>/dev/null)
|
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$REDIS_CONTAINER" 2>/dev/null)
|
||||||
if [ "$STATUS" = "healthy" ]; then
|
if [ "$STATUS" = "healthy" ]; then
|
||||||
echo -e "\r ${GREEN}✔ Redis is healthy and ready! ${NC}"
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ Redis sehat dan siap! "
|
||||||
break
|
break
|
||||||
elif [ -z "$STATUS" ]; then
|
elif [ -z "$STATUS" ]; then
|
||||||
RUNNING=$(docker inspect --format='{{.State.Running}}' "$REDIS_CONTAINER" 2>/dev/null)
|
RUNNING=$(docker inspect --format='{{.State.Running}}' "$REDIS_CONTAINER" 2>/dev/null)
|
||||||
if [ "$RUNNING" = "true" ]; then
|
if [ "$RUNNING" = "true" ]; then
|
||||||
echo -e "\r ${GREEN}✔ Redis is running. ${NC}"
|
echo -e "\r ${GREEN}[SELESAI]${NC} ✔ Redis container aktif. "
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo -n "."
|
echo -n "."
|
||||||
sleep 1.5
|
sleep 1.2
|
||||||
RETRIES=$((RETRIES + 1))
|
RETRIES=$((RETRIES + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
# Extra sleep for container initialization
|
# Secure storage and cache permissions inside container
|
||||||
sleep 2
|
$DOCKER_COMPOSE_CMD exec -u root laravel.test chown -R sail:sail /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
||||||
|
$DOCKER_COMPOSE_CMD exec -u root laravel.test chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
||||||
# Writable directories permission fix
|
log_success "Hak akses file storage & cache berhasil diselaraskan."
|
||||||
docker compose exec -u root laravel.test chown -R sail:sail /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
|
||||||
docker compose exec -u root laravel.test chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null
|
|
||||||
echo -e " ${GREEN}✔ Folder write permissions secured.${NC}"
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 5. Database Migration Sync
|
# 5. START VITE FRONTEND LIVE SERVER
|
||||||
echo -e "${CYAN}[5/6] Checking for pending database migrations...${NC}"
|
echo -e "${BOLD}${BLUE}[5/5] Memulai Server Frontend (Vite Live-Reload)...${NC}"
|
||||||
docker compose exec -u sail laravel.test php artisan migrate
|
|
||||||
|
# Start npm dev in background inside container
|
||||||
|
$DOCKER_COMPOSE_CMD exec -d -u sail laravel.test npm run dev
|
||||||
|
log_success "Server pengembangan Vite aktif di latar belakang."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 6. Booting Live-reload Dev Server
|
sleep 1
|
||||||
echo -e "${CYAN}[6/6] Launching React Vite dev server...${NC}"
|
clear_screen
|
||||||
# Stop any duplicate background dev servers inside container
|
|
||||||
docker compose exec -u sail laravel.test pkill -f "vite" &>/dev/null
|
|
||||||
|
|
||||||
# Start Vite server in detached mode
|
# Premium Dashboard Information Board
|
||||||
docker compose exec -d -u sail laravel.test npm run dev
|
echo -e "${GREEN}======================================================================${NC}"
|
||||||
echo -e " ${GREEN}✔ Vite live-reload dev server launched in background.${NC}"
|
echo -e "${BOLD}${GREEN} 🚀 BIIPROJECT KIT V2 BERHASIL DIJALANKAN! 🚀 ${NC}"
|
||||||
echo ""
|
echo -e "${GREEN}======================================================================${NC}"
|
||||||
|
echo -e " Aplikasi Anda berjalan lancar di dalam Docker container."
|
||||||
# Final Premium Screen Info
|
echo -e ""
|
||||||
echo -e "${CYAN}=========================================================${NC}"
|
echo -e " 👉 ${BOLD}Web Application:${NC} ${CYAN}http://localhost:${APP_PORT}${NC}"
|
||||||
echo -e " 🎉 ${GREEN}${BOLD}Biiproject Kit v2 is running successfully!${NC} 🎉"
|
echo -e " 👉 ${BOLD}Monitoring Panel:${NC} ${CYAN}http://localhost:${APP_PORT}/system-monitoring${NC}"
|
||||||
echo -e "${CYAN}=========================================================${NC}"
|
echo -e " 👉 ${BOLD}Dokumentasi API:${NC} ${CYAN}http://localhost:${APP_PORT}/documentation${NC}"
|
||||||
echo -e " 🚀 ${WHITE}${BOLD}Web Application:${NC} ${GREEN}http://localhost:${PORT_8000}${NC}"
|
echo -e " 👉 ${BOLD}Database Port:${NC} ${YELLOW}${DB_PORT}${NC} (PostgreSQL)"
|
||||||
echo -e " 📋 ${WHITE}${BOLD}Activity Telemetry:${NC} ${GREEN}http://localhost:${PORT_8000}/activity-logs${NC}"
|
echo -e " 👉 ${BOLD}Redis Port:${NC} ${YELLOW}${REDIS_PORT}${NC} (Redis)"
|
||||||
echo -e " 📖 ${WHITE}${BOLD}Documentation Hub:${NC} ${GREEN}http://localhost:${PORT_8000}/documentation${NC}"
|
echo -e ""
|
||||||
echo -e " 🐘 ${WHITE}${BOLD}Postgres Port:${NC} ${YELLOW}${PORT_5432}${NC}"
|
echo -e " ========================================================"
|
||||||
echo -e " 🍒 ${WHITE}${BOLD}Redis Port:${NC} ${YELLOW}${PORT_6379}${NC}"
|
echo -e " ${BOLD}PERINTAH BERMANFAAT LAINNYA:${NC}"
|
||||||
echo -e "${CYAN}=========================================================${NC}"
|
echo -e " ========================================================"
|
||||||
echo -e " ${YELLOW}${BOLD}Useful Commands:${NC}"
|
echo -e " Untuk melihat logs realtime dari container:"
|
||||||
echo -e " 👉 View live logs: ${CYAN}docker compose logs -f${NC}"
|
echo -e " ${CYAN}docker compose logs -f${NC}"
|
||||||
echo -e " 👉 Stop the stack: ${CYAN}docker compose down${NC}"
|
echo -e ""
|
||||||
echo -e " 👉 Restart containers: ${CYAN}./run.sh${NC}"
|
echo -e " Untuk masuk ke terminal container aplikasi:"
|
||||||
echo -e "${CYAN}=========================================================${NC}"
|
echo -e " ${CYAN}./sail shell${NC}"
|
||||||
|
echo -e ""
|
||||||
|
echo -e " Untuk menghentikan dan menonaktifkan container:"
|
||||||
|
echo -e " ${CYAN}docker compose down${NC}"
|
||||||
|
echo -e "${GREEN}======================================================================${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user