filter query

This commit is contained in:
Bayu Lukman Yusuf 2026-01-07 11:58:22 +07:00
parent 4a32c25337
commit 8548016200
10 changed files with 559 additions and 791 deletions

View File

@ -8,29 +8,62 @@ use App\Repositories\Catalog\CategoryRepository;
use App\Repositories\Catalog\GenderRepository; use App\Repositories\Catalog\GenderRepository;
use App\Repositories\Catalog\ProductRepository; use App\Repositories\Catalog\ProductRepository;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
class ProductController extends Controller class ProductController extends Controller
{ {
public function index(Request $request) public function index(Request $request)
{ {
$limit = 20;
$page = $request->page ?? 1; $page = $request->page ?? 1;
$search = $request->search;
$filter = $request->filter ?? []; $filter = $request->filter ?? [];
$sortBy = $request->sort_by ?? 'relevance'; $sortBy = $request->sort_by ?? 'relevance';
$price_range_start = $request->price_range_start ?? null;
$price_range_end = $request->price_range_end ?? null;
$genderRepository = new GenderRepository; $genderRepository = new GenderRepository;
$categoryRepository = new CategoryRepository; $categoryRepository = new CategoryRepository;
$genders = $genderRepository->getList([]); $genders = $genderRepository->getList([]);
$categories = $categoryRepository->getList([]); $categories = $categoryRepository->getList([]);
$user = auth()->user();
$userId = $user ? $user->id : 0;
[$location_id, $is_consignment] = Cache::remember('employee_user_'.$userId, 60 * 60 * 24, function () use ($user) {
if ($user == null) {
return [10, false];
}
$employee = @$user->employee;
$location_id = @$employee->location_id;
$location = @$employee->location;
$is_consignment = (bool) @$location->is_consignment;
return [$location_id, $is_consignment];
});
$productRepository = new ProductRepository; $productRepository = new ProductRepository;
$products = $productRepository->getList([ $products = $productRepository->getList([
'limit' => 20, 'limit' => $page * $limit,
'sort_by' => $sortBy, 'sort' => $sortBy,
'category_id' => $filter['category'] ?? null,
'gender_id' => $filter['gender'] ?? null,
'search' => $search,
'location_id' => $location_id,
'is_consignment' => $is_consignment,
'price_range_start' => $price_range_start,
'price_range_end' => $price_range_end,
]); ]);
if (isset($filter['category']) && $filter['category']){ if (isset($filter['category']) && $filter['category']){
$category = StoreCategory::find($filter['category']); $category = StoreCategory::find($filter['category']);
@ -54,6 +87,8 @@ class ProductController extends Controller
$filters = $filter; $filters = $filter;
$min_max_price = $productRepository->getMinMaxPrice();
return view('shop.catalog-fashion', [ return view('shop.catalog-fashion', [
'filters' => $filters, 'filters' => $filters,
@ -62,6 +97,7 @@ class ProductController extends Controller
'products' => $products, 'products' => $products,
'page' => $page, 'page' => $page,
'min_max_price' => $min_max_price,
]); ]);
} }

View File

@ -2,32 +2,31 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Awobaz\Compoships\Compoships;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Awobaz\Compoships\Compoships;
use Spatie\Activitylog\LogOptions;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Spatie\Activitylog\LogOptions;
class Items extends Model class Items extends Model
{ {
use HasFactory, SoftDeletes;
use Compoships; use Compoships;
use HasFactory, SoftDeletes;
public function getActivitylogOptions(): LogOptions public function getActivitylogOptions(): LogOptions
{ {
return LogOptions::defaults(); return LogOptions::defaults();
} }
// protected $with = ['brands', 'categories']; // protected $with = ['brands', 'categories'];
protected $table = 'items'; protected $table = 'items';
protected $primaryKey = 'id'; protected $primaryKey = 'id';
protected $guarded = ['id']; protected $guarded = ['id'];
protected $fillable = [ protected $fillable = [
@ -63,15 +62,15 @@ class Items extends Model
'group_type', 'group_type',
'model_type', 'model_type',
'slug' 'slug',
]; ];
public function scopeFilter(Builder $query, array $filters) public function scopeFilter(Builder $query, array $filters)
{ {
$query->when($filters['search'] ?? false, function ($query, $search) { $query->when($filters['search'] ?? false, function ($query, $search) {
return $query return $query
->where('number', 'iLIKE', '%' . $search . '%') ->where('number', 'iLIKE', '%'.$search.'%')
->orWhere('name', 'iLIKE', '%' . $search . '%'); ->orWhere('name', 'iLIKE', '%'.$search.'%');
}); });
} }
@ -82,39 +81,38 @@ class Items extends Model
public function dimension() public function dimension()
{ {
return $this->hasOne(ItemDimension::class,"no","number"); return $this->hasOne(ItemDimension::class, 'no', 'number');
} }
public function reference() public function reference()
{ {
return $this->hasOne(ItemReference::class,'item_id') return $this->hasOne(ItemReference::class, 'item_id')
->where(function($query){ ->where(function ($query) {
$query->whereNull("item_variant_id")->orWhere("item_variant_id",0); $query->whereNull('item_variant_id')->orWhere('item_variant_id', 0);
}); });
} }
public function variants() public function variants()
{ {
return $this->hasMany(ItemVariant::class,"item_id") return $this->hasMany(ItemVariant::class, 'item_id')
->leftJoin("stocks","item_variant_id","=","item_variants.id") ->leftJoin('stocks', 'item_variant_id', '=', 'item_variants.id')
->select("item_variants.id","item_variants.code","item_variants.display_name","item_variants.is_publish", DB::raw("SUM(quantity) as stock"),"description","item_variants.item_id") ->select('item_variants.id', 'item_variants.code', 'item_variants.display_name', 'item_variants.is_publish', DB::raw('SUM(quantity) as stock'), 'description', 'item_variants.item_id')
->groupBy("item_variants.id","item_variants.code","description","item_variants.item_id","item_variants.display_name","item_variants.is_publish"); ->groupBy('item_variants.id', 'item_variants.code', 'description', 'item_variants.item_id', 'item_variants.display_name', 'item_variants.is_publish');
} }
public function images() public function images()
{ {
return $this->hasMany(ItemImage::class,'item_id')->whereNull('item_variant_id'); return $this->hasMany(ItemImage::class, 'item_id')->whereNull('item_variant_id');
} }
public function itemVariants() public function itemVariants()
{ {
return $this->hasMany(ItemVariant::class,"item_id")->with("reference"); return $this->hasMany(ItemVariant::class, 'item_id')->with('reference');
} }
public function publishedItemVariants() public function publishedItemVariants()
{ {
return $this->hasMany(ItemVariant::class,"item_id")->with("reference")->where('is_publish', true); return $this->hasMany(ItemVariant::class, 'item_id')->with('reference')->where('is_publish', true);
} }
public function brands() public function brands()
@ -147,10 +145,10 @@ class Items extends Model
$user = auth()->user(); $user = auth()->user();
[$location_id, $is_consignment] = Cache::remember( [$location_id, $is_consignment] = Cache::remember(
'employee_user_' . optional($user)->id, 'employee_user_'.optional($user)->id,
60 * 60 * 24, 60 * 60 * 24,
function () use ($user) { function () use ($user) {
if (!$user) { if (! $user) {
return [10, false]; return [10, false];
} }
@ -164,7 +162,6 @@ class Items extends Model
} }
); );
// return $this->hasOne(Discount::class,DB::raw("item_reference.item_id")) // return $this->hasOne(Discount::class,DB::raw("item_reference.item_id"))
// ->leftJoin('discount_items', 'discount_items.discount_id', '=', 'discounts.id') // ->leftJoin('discount_items', 'discount_items.discount_id', '=', 'discounts.id')
// ->leftJoin('item_reference', 'item_reference.id', '=', 'discount_items.item_reference_id') // ->leftJoin('item_reference', 'item_reference.id', '=', 'discount_items.item_reference_id')
@ -192,55 +189,56 @@ class Items extends Model
// 'discount_items.price', // 'discount_items.price',
// ]); // ]);
return $this->hasOne(DiscountItem::class, 'item_reference_id', 'id') return $this->hasOne(DiscountItem::class, 'item_reference_id', 'id')
->leftJoin('discounts', 'discounts.id', '=', 'discount_items.discount_id') ->leftJoin('discounts', 'discounts.id', '=', 'discount_items.discount_id')
->leftJoin('item_reference', 'item_reference.id', '=', 'discount_items.item_reference_id') ->leftJoin('item_reference', 'item_reference.id', '=', 'discount_items.item_reference_id')
->where('discounts.type', 'discount') ->where('discounts.type', 'discount')
->where(function ($q) { ->where(function ($q) {
$q->whereNull('discounts.valid_at') $q->whereNull('discounts.valid_at')
->orWhere('discounts.valid_at', '<=', now()); ->orWhere('discounts.valid_at', '<=', now());
}) })
->where(function ($q) { ->where(function ($q) {
$q->whereNull('discounts.expired_at') $q->whereNull('discounts.expired_at')
->orWhere('discounts.expired_at', '>=', now()); ->orWhere('discounts.expired_at', '>=', now());
}) })
->where(function ($q) use ($location_id, $is_consignment) { ->where(function ($q) use ($location_id, $is_consignment) {
if (!$is_consignment) { if (! $is_consignment) {
$q->whereNull('discounts.location_id'); $q->whereNull('discounts.location_id');
} }
if ($location_id) { if ($location_id) {
$q->orWhere('discounts.location_id', $location_id); $q->orWhere('discounts.location_id', $location_id);
} }
}) })
->orderByDesc('discounts.created_at') ->orderByDesc('discounts.created_at')
->select([ ->select([
'item_reference.item_id', 'item_reference.item_id',
'discount_items.price', 'discount_items.price',
]); ]);
} }
public function price() public function price()
{ {
$user = auth()->user(); $user = auth()->user();
$userId = $user ? $user->id : 0; $userId = $user ? $user->id : 0;
list($location_id, $is_consignment) = Cache::remember("employee_user_".$userId, 60 * 60 * 24, function() use ($user){ [$location_id, $is_consignment] = Cache::remember('employee_user_'.$userId, 60 * 60 * 24, function () use ($user) {
if ($user == null) if ($user == null) {
return [10, false]; return [10, false];
}
$employee = @$user->employee; $employee = @$user->employee;
$location_id = @$employee->location_id; $location_id = @$employee->location_id;
$location = @$employee->location; $location = @$employee->location;
$is_consignment = (boolean) @$location->is_consignment; $is_consignment = (bool) @$location->is_consignment;
return [$location_id, $is_consignment]; return [$location_id, $is_consignment];
}); });
return $this->hasOne(Discount::class, 'id', 'item_reference_id') return $this->hasOne(Discount::class, 'id', 'item_reference_id')
->leftJoin('discount_items', 'discount_items.discount_id', '=', 'discounts.id') ->leftJoin('discount_items', 'discount_items.discount_id', '=', 'discounts.id')
->where('discounts.type', 'price') ->where('discounts.type', 'price')
->where(function ($query) { ->where(function ($query) {
@ -252,7 +250,7 @@ class Items extends Model
->orWhereNull('expired_at'); ->orWhereNull('expired_at');
}) })
->where(function ($query) use ($location_id, $is_consignment) { ->where(function ($query) use ($location_id, $is_consignment) {
if (!$is_consignment) { if (! $is_consignment) {
$query->whereNull('discounts.location_id'); $query->whereNull('discounts.location_id');
} }
@ -269,13 +267,13 @@ class Items extends Model
public function stock() public function stock()
{ {
return $this->hasOne(Stock::class,"item_id") return $this->hasOne(Stock::class, 'item_id')
->leftJoin("locations","locations.id","=","location_id") ->leftJoin('locations', 'locations.id', '=', 'location_id')
->whereNotNull("locations.display_name") ->whereNotNull('locations.display_name')
->where("locations.display_name","<>","") ->where('locations.display_name', '<>', '')
->where("quantity",">","0") ->where('quantity', '>', '0')
->groupBy("item_id") ->groupBy('item_id')
->select("item_id",DB::raw("SUM(quantity) as quantity")); ->select('item_id', DB::raw('SUM(quantity) as quantity'));
} }
public function attributes() public function attributes()
@ -287,28 +285,23 @@ class Items extends Model
{ {
$image = $this->images->first()->filename ?? null; $image = $this->images->first()->filename ?? null;
if (str_contains($image, 'http')) {
if (str_contains($image,"http")) {
return $image; return $image;
} }
return $image ? Storage::disk('wms')->url($image) : null; return $image ? Storage::disk('wms')->url($image) : null;
} }
public function getImageUrlsAttribute() public function getImageUrlsAttribute()
{ {
$images = $this->images ?? []; $images = $this->images ?? [];
$imgs = []; $imgs = [];
foreach ($images as $img) { foreach ($images as $img) {
$image = $img->filename; $image = $img->filename;
if (str_contains($image,"http")) { if (str_contains($image, 'http')) {
$imgs[] = $image; $imgs[] = $image;
} else { } else {
$imgs[] = $image ? Storage::disk('wms')->url($image) : null; $imgs[] = $image ? Storage::disk('wms')->url($image) : null;
@ -318,15 +311,14 @@ class Items extends Model
return $imgs; return $imgs;
} }
public function conversion_value() public function conversion_value()
{ {
$convertion = 1; $convertion = 1;
if (($this->display_unit != $this->unit) and ($this->display_unit)){ if (($this->display_unit != $this->unit) and ($this->display_unit)) {
$convertions = DB::select("select to_qty / from_qty as conv $convertions = DB::select('select to_qty / from_qty as conv
from item_convertions where from_unit = ? and to_unit = ?", from item_convertions where from_unit = ? and to_unit = ?',
[$this->display_unit, $this->unit] ); [$this->display_unit, $this->unit]);
$convertion = max((float) @$convertions[0]->conv,1); $convertion = max((float) @$convertions[0]->conv, 1);
} }
return $convertion; return $convertion;
@ -346,13 +338,13 @@ class Items extends Model
} }
} }
public function getDisplayDiscountPriceAttribute() public function getDisplayDiscountPriceAttribute()
{ {
try { try {
$convertion = $this->conversion_value(); $convertion = $this->conversion_value();
$discountPrice = @$this->discount->price ?? 0; $discountPrice = @$this->discount->price ?? 0;
return (float) $discountPrice * $convertion; return (float) $discountPrice * $convertion;
} catch (\Exception $e) { } catch (\Exception $e) {
return 0; return 0;

View File

@ -2,6 +2,7 @@
namespace App\Repositories\Catalog; namespace App\Repositories\Catalog;
use App\Models\DiscountItem;
use App\Models\Items; use App\Models\Items;
use App\Models\StoreCategoryMap; use App\Models\StoreCategoryMap;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@ -18,6 +19,67 @@ class ProductRepository
$brand_id = @$params["brand_id"]; $brand_id = @$params["brand_id"];
$gender_id = @$params["gender_id"]; $gender_id = @$params["gender_id"];
$limit = @$params["limit"]; $limit = @$params["limit"];
$location_id = @$params["location_id"];
$is_consignment = @$params["is_consignment"];
$price_range_start = @$params["price_range_start"];
$price_range_end = @$params["price_range_end"];
$sorting_ids = [];
if ($sort == "price_low_to_high" || $sort == "price_high_to_low"){
$sorting_ids = DiscountItem::whereHas('discount', function($query) use ($location_id, $is_consignment) {
$query->where('type', 'price')
->where(function ($query) {
$query->where('valid_at', '<=', now())
->orWhereNull('valid_at');
})
->where(function ($query) {
$query->where('expired_at', '>', now())
->orWhereNull('expired_at');
})
->where(function ($query) use ($location_id, $is_consignment) {
if (! $is_consignment) {
$query->whereNull('discounts.location_id');
}
if ($location_id) {
$query->orWhere('discounts.location_id', $location_id);
}
});
})
->orderBy('discount_items.price', $sort == "price_low_to_high" ? 'asc' : 'desc')
->pluck('item_reference_id')->toArray();
}
$where_ids = [];
if ($price_range_start && $price_range_end) {
$where_ids = DiscountItem::whereHas('discount', function($query) use ($location_id, $is_consignment, $price_range_start, $price_range_end) {
$query->where('type', 'price')
->where(function ($query) {
$query->where('valid_at', '<=', now())
->orWhereNull('valid_at');
})
->where(function ($query) {
$query->where('expired_at', '>', now())
->orWhereNull('expired_at');
})
->where(function ($query) use ($location_id, $is_consignment) {
if (! $is_consignment) {
$query->whereNull('discounts.location_id');
}
if ($location_id) {
$query->orWhere('discounts.location_id', $location_id);
}
})
->where('discount_items.price', '>=', $price_range_start)
->where('discount_items.price', '<=', $price_range_end);
})
->pluck('item_reference_id')->toArray();
}
$builder = Items::select('items.*','percent') $builder = Items::select('items.*','percent')
->leftJoin('item_dimension', 'item_dimension.no', 'items.number') ->leftJoin('item_dimension', 'item_dimension.no', 'items.number')
->leftJoin(DB::raw("(select distinct on (item_id) item_id, percent, discounts.created_at, ->leftJoin(DB::raw("(select distinct on (item_id) item_id, percent, discounts.created_at,
@ -30,7 +92,7 @@ class ProductRepository
( discounts.valid_at is null or discounts.expired_at >= now()) ( discounts.valid_at is null or discounts.expired_at >= now())
order by item_id, discounts.created_at desc order by item_id, discounts.created_at desc
) as d"),"d.item_id","=","items.id") ) as d"),"d.item_id","=","items.id")
->when(true, function($query) use ($event, $sort){ ->when(true, function($query) use ($event, $sort,$sorting_ids){
if ($event){ if ($event){
$query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC "); $query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC ");
@ -41,11 +103,12 @@ class ProductRepository
$query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC "); $query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC ");
} */ } */
if ($sort == "new"){ if (!empty($sorting_ids)) {
\Log::info($sort); $ids = implode(',', $sorting_ids);
$query->orderByRaw("array_position(ARRAY[$ids], items.id)");
}else if ($sort == "new"){
$query->orderByRaw("case when category1 in ('CLUBS','CLUB','COMPONENT HEAD') and brand = 'PXG' then 1 else 2 end ASC"); $query->orderByRaw("case when category1 in ('CLUBS','CLUB','COMPONENT HEAD') and brand = 'PXG' then 1 else 2 end ASC");
}else{ } else {
$query->orderByRaw("case when d.created_at is not null then 1 else 2 end ASC, random()"); $query->orderByRaw("case when d.created_at is not null then 1 else 2 end ASC, random()");
} }
@ -92,9 +155,21 @@ class ProductRepository
}); });
} }
return $builder->paginate($limit); return $builder->paginate($limit);
} }
public function getMinMaxPrice()
{
return [
'min' => DiscountItem::min('price'),
'max' => DiscountItem::max('price'),
];
}
public function show($slug) public function show($slug)
{ {
$product = Items::where('slug', $slug)->first(); $product = Items::where('slug', $slug)->first();

4
lang/en/header.php Normal file
View File

@ -0,0 +1,4 @@
<?php
return [
'categories' => 'Categories',
];

4
lang/id/header.php Normal file
View File

@ -0,0 +1,4 @@
<?php
return [
'categories' => 'Kategori',
];

View File

@ -1,145 +1,364 @@
<header class="navbar navbar-expand-lg navbar-sticky bg-body d-block z-fixed p-0" data-sticky-navbar='{"offset": 500}'> <div>
<div class="container py-2 py-lg-3">
<div class="d-flex align-items-center gap-3">
<!-- Mobile offcanvas menu toggler (Hamburger) --> <div class="offcanvas offcanvas-end pb-sm-2 px-sm-2" id="shoppingCart" tabindex="-1"
<button type="button" class="navbar-toggler me-4 me-md-2" data-bs-toggle="offcanvas" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-label="Toggle navigation"> aria-labelledby="shoppingCartLabel" style="width: 500px">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Country selector visible on screens > 768px wide (md breakpoint) -->
<x-language-selector />
<!-- LOcation selector visible on screens > 768px wide (md breakpoint) -->
<x-location-selector />
<!-- Header -->
<div class="offcanvas-header flex-column align-items-start py-3 pt-lg-4">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-lg-4">
<h4 class="offcanvas-title" id="shoppingCartLabel">Shopping cart</h4>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<p class="fs-sm">Buy <span class="text-dark-emphasis fw-semibold">$53</span> more to get <span
class="text-dark-emphasis fw-semibold">Free Shipping</span></p>
<div class="progress w-100" role="progressbar" aria-label="Free shipping progress" aria-valuenow="78"
aria-valuemin="0" aria-valuemax="100" style="height: 4px">
<div class="progress-bar bg-dark rounded-pill d-none-dark" style="width: 78%"></div>
<div class="progress-bar bg-light rounded-pill d-none d-block-dark" style="width: 78%"></div>
</div>
</div> </div>
<!-- Navbar brand (Logo) --> <!-- Items -->
<a class="navbar-brand fs-2 py-0 m-0 me-auto me-sm-n5" href="/"> <div class="offcanvas-body d-flex flex-column gap-4 pt-2">
<img src="{{ asset('logo/logo-colored.png') }}" class="d-none d-lg-block" style="height:32px;"/> <!-- Item -->
<img src="{{ asset('logo/logo-app.png') }}" class="d-lg-none" style="height:42px;"/> <div class="d-flex align-items-center">
</a> <a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/07.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Leather sneakers with golden
laces</a>
</h5>
<div class="h6 pb-1 mb-2">$74.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Button group --> <!-- Item -->
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/08.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Classic cotton men's shirt</a>
</h5>
<div class="h6 pb-1 mb-2">$27.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Navbar stuck nav toggler --> <!-- Item -->
<button type="button" class="navbar-toggler d-none navbar-stuck-show me-3" data-bs-toggle="collapse" data-bs-target="#stuckNav" aria-controls="stuckNav" aria-expanded="false" aria-label="Toggle navigation in navbar stuck state"> <div class="d-flex align-items-center">
<span class="navbar-toggler-icon"></span> <a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
</button> <img src="/img/shop/fashion/thumbs/09.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
<!-- Theme switcher (light/dark/auto) --> </a>
<div class="dropdown"> <div class="w-100 min-w-0 ps-3">
<button type="button" class="theme-switcher btn btn-icon btn-lg btn-outline-secondary fs-lg border-0 rounded-circle animate-scale" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Toggle theme (light)"> <h5 class="d-flex animate-underline mb-2">
<span class="theme-icon-active d-flex animate-target"> <a class="d-block fs-sm fw-medium text-truncate animate-target"
<i class="ci-sun"></i> href="{{ route('second', ['shop', 'product-fashion']) }}">Polarized sunglasses for men</a>
</span> </h5>
</button> <div class="h6 pb-1 mb-2">$96.00 <del class="text-body-tertiary fs-xs fw-normal">112.00</del>
<ul class="dropdown-menu" style="--cz-dropdown-min-width: 9rem"> </div>
<li> <div class="d-flex align-items-center justify-content-between">
<button type="button" class="dropdown-item active" data-bs-theme-value="light" aria-pressed="true"> <div class="count-input rounded-2">
<span class="theme-icon d-flex fs-base me-2"> <button type="button" class="btn btn-icon btn-sm" data-decrement
<i class="ci-sun"></i> aria-label="Decrement quantity">
</span> <i class="ci-minus"></i>
<span class="theme-label">Light</span> </button>
<i class="item-active-indicator ci-check ms-auto"></i> <input type="number" class="form-control form-control-sm" value="1" readonly>
</button> <button type="button" class="btn btn-icon btn-sm" data-increment
</li> aria-label="Increment quantity">
<li> <i class="ci-plus"></i>
<button type="button" class="dropdown-item" data-bs-theme-value="dark" aria-pressed="false"> </button>
<span class="theme-icon d-flex fs-base me-2"> </div>
<i class="ci-moon"></i> <button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
</span> data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
<span class="theme-label">Dark</span> aria-label="Remove from cart"></button>
<i class="item-active-indicator ci-check ms-auto"></i> </div>
</button> </div>
</li> </div>
<li>
<button type="button" class="dropdown-item" data-bs-theme-value="auto" aria-pressed="false">
<span class="theme-icon d-flex fs-base me-2">
<i class="ci-auto"></i>
</span>
<span class="theme-label">Auto</span>
<i class="item-active-indicator ci-check ms-auto"></i>
</button>
</li>
</ul>
</div>
<!-- Search toggle button visible on screens < 992px wide (lg breakpoint) -->
<button type="button" class="btn btn-icon btn-lg fs-xl btn-outline-secondary border-0 rounded-circle animate-shake d-lg-none" data-bs-toggle="offcanvas" data-bs-target="#searchBox" aria-controls="searchBox" aria-label="Toggle search bar">
<i class="ci-search animate-target"></i>
</button>
<!-- Account button visible on screens > 768px wide (md breakpoint) -->
<a class="btn btn-icon btn-lg fs-lg btn-outline-secondary border-0 rounded-circle animate-shake d-none d-md-inline-flex" href="{{ route('second', ['account', 'signin']) }}">
<i class="ci-user animate-target"></i>
<span class="visually-hidden">Account</span>
</a>
<!-- Wishlist button visible on screens > 768px wide (md breakpoint) -->
<a class="btn btn-icon btn-lg fs-lg btn-outline-secondary border-0 rounded-circle animate-pulse d-none d-md-inline-flex" href="#!">
<i class="ci-heart animate-target"></i>
<span class="visually-hidden">Wishlist</span>
</a>
<!-- Cart button -->
<button type="button" class="btn btn-icon btn-lg fs-xl btn-outline-secondary position-relative border-0 rounded-circle animate-scale" data-bs-toggle="offcanvas" data-bs-target="#shoppingCart" aria-controls="shoppingCart" aria-label="Shopping cart">
<span class="position-absolute top-0 start-100 badge fs-xs text-bg-primary rounded-pill mt-1 ms-n4 z-2" style="--cz-badge-padding-y: .25em; --cz-badge-padding-x: .42em">3</span>
<i class="ci-shopping-bag animate-target me-1"></i>
</button>
</div> </div>
</div>
<!-- Main navigation that turns into offcanvas on screens < 992px wide (lg breakpoint) --> <!-- Footer -->
<div class="collapse navbar-stuck-hide" id="stuckNav"> <div class="offcanvas-header flex-column align-items-start">
<nav class="offcanvas offcanvas-start" id="navbarNav" tabindex="-1" aria-labelledby="navbarNavLabel"> <div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-md-4">
<div class="offcanvas-header py-3"> <span class="text-light-emphasis">Subtotal:</span>
<h5 class="offcanvas-title" id="navbarNavLabel">Browse Cartzilla</h5> <span class="h6 mb-0">$197.00</span>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div>
</div> <div class="d-flex w-100 gap-3">
<a class="btn btn-lg btn-secondary w-100" href="#!">View cart</a>
<a class="btn btn-lg btn-dark w-100" href="#!">Checkout</a>
</div>
</div>
</div>
<!-- Country and City selects visible on screens < 768px wide (md breakpoint) --> <div class="offcanvas offcanvas-top" id="searchBox" data-bs-backdrop="static" tabindex="-1">
<div class="offcanvas-header gap-3 d-md-none pt-0 pb-3"> <div class="offcanvas-header border-bottom p-0 py-lg-1">
<x-language-selector-sidebar /> <form class="container d-flex align-items-center">
<x-location-selector-sidebar /> <input type="search" class="form-control form-control-lg fs-lg border-0 rounded-0 py-3 ps-0"
</div> placeholder="Search the products" data-autofocus="offcanvas">
<div class="offcanvas-body pt-1 pb-3 py-lg-0"> <button type="reset" class="btn-close fs-lg" data-bs-dismiss="offcanvas"
<div class="container pb-lg-2 px-0 px-lg-3"> aria-label="Close"></button>
</form>
</div>
<div class="offcanvas-body px-0">
<div class="container text-center">
<svg class="text-body-tertiary opacity-60 mb-4" xmlns="http://www.w3.org/2000/svg" width="60"
viewBox="0 0 512 512" fill="currentColor">
<path
d="M340.115,361.412l-16.98-16.98c-34.237,29.36-78.733,47.098-127.371,47.098C87.647,391.529,0,303.883,0,195.765S87.647,0,195.765,0s195.765,87.647,195.765,195.765c0,48.638-17.738,93.134-47.097,127.371l16.98,16.98l11.94-11.94c5.881-5.881,15.415-5.881,21.296,0l112.941,112.941c5.881,5.881,5.881,15.416,0,21.296l-45.176,45.176c-5.881,5.881-15.415,5.881-21.296,0L328.176,394.648c-5.881-5.881-5.881-15.416,0-21.296L340.115,361.412z M195.765,361.412c91.484,0,165.647-74.163,165.647-165.647S287.249,30.118,195.765,30.118S30.118,104.28,30.118,195.765S104.28,361.412,195.765,361.412z M360.12,384l91.645,91.645l23.88-23.88L384,360.12L360.12,384z M233.034,233.033c5.881-5.881,15.415-5.881,21.296,0c5.881,5.881,5.881,15.416,0,21.296c-32.345,32.345-84.786,32.345-117.131,0c-5.881-5.881-5.881-15.415,0-21.296c5.881-5.881,15.416-5.881,21.296,0C179.079,253.616,212.45,253.616,233.034,233.033zM135.529,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588c12.475,0,22.588,10.113,22.588,22.588C158.118,170.593,148.005,180.706,135.529,180.706z M256,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588s22.588,10.113,22.588,22.588C278.588,170.593,268.475,180.706,256,180.706z" />
</svg>
<h6 class="mb-2">Your search results will appear here</h6>
<p class="fs-sm mb-0">Start typing in the search field above to see instant search results.</p>
</div>
</div>
</div>
<div class="position-relative d-lg-flex align-items-center justify-content-between"> <div class="alert alert-dismissible bg-dark text-white rounded-0 py-2 px-0 m-0 fade show" data-bs-theme="dark">
<div class="container position-relative d-flex min-w-0">
<div class="d-flex flex-nowrap align-items-center g-2 w-100 min-w-0 mx-auto mt-n1"
style="max-width: 458px">
<div class="nav me-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarPrev" aria-label="Prev">
<i class="ci-chevron-left"></i>
</button>
</div>
<div class="swiper fs-sm text-white"
data-swiper='{
"spaceBetween": 24,
"loop": true,
"autoplay": {
"delay": 5000,
"disableOnInteraction": false
},
"navigation": {
"prevEl": "#topbarPrev",
"nextEl": "#topbarNext"
}
}'>
<div class="swiper-wrapper min-w-0">
<div class="swiper-slide text-truncate text-center">🎉 Free Shipping on orders over $250. <span
class="d-none d-sm-inline">Don't miss a discount!</span></div>
<div class="swiper-slide text-truncate text-center">💰 Money back guarantee. <span
class="d-none d-sm-inline">We return money within 30 days.</span></div>
<div class="swiper-slide text-truncate text-center">💪 Friendly 24/7 customer support. <span
class="d-none d-sm-inline">We've got you covered!</span></div>
</div>
</div>
<div class="nav ms-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarNext" aria-label="Next">
<i class="ci-chevron-right"></i>
</button>
</div>
</div>
<button type="button" class="btn-close position-static flex-shrink-0 p-1 ms-3 ms-md-n4"
data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<header class="navbar navbar-expand-lg navbar-sticky bg-body d-block z-fixed p-0"
data-sticky-navbar='{"offset": 500}'>
<div class="container py-2 py-lg-3">
<div class="d-flex align-items-center gap-3">
<!-- Categories mega menu --> <!-- Mobile offcanvas menu toggler (Hamburger) -->
<x-layout.navbar-category /> <button type="button" class="navbar-toggler me-4 me-md-2" data-bs-toggle="offcanvas"
data-bs-target="#navbarNav" aria-controls="navbarNav" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
<!-- Navbar nav -->
<x-layout.navbar-menu />
<!-- Search toggle visible on screens > 991px wide (lg breakpoint) -->
<button type="button" class="btn btn-outline-secondary justify-content-start w-100 px-3 mb-lg-2 ms-3 d-none d-lg-inline-flex" style="max-width: 240px" data-bs-toggle="offcanvas" data-bs-target="#searchBox" aria-controls="searchBox">
<i class="ci-search fs-base ms-n1 me-2"></i>
<span class="text-body-tertiary fw-normal">Search</span>
</button> </button>
</div>
</div>
</div>
<!-- Account and Wishlist buttons visible on screens < 768px wide (md breakpoint) --> <!-- Country selector visible on screens > 768px wide (md breakpoint) -->
<div class="offcanvas-header border-top px-0 py-3 mt-3 d-md-none"> <x-language-selector />
<div class="nav nav-justified w-100">
<a class="nav-link border-end" href="{{ route('second', ['account', 'signin']) }}"> <!-- LOcation selector visible on screens > 768px wide (md breakpoint) -->
<i class="ci-user fs-lg opacity-60 me-2"></i> <x-location-selector />
Account
</a>
<a class="nav-link" href="#!">
<i class="ci-heart fs-lg opacity-60 me-2"></i>
Wishlist
</a>
</div> </div>
</div>
</nav> <!-- Navbar brand (Logo) -->
</div> <a class="navbar-brand fs-2 py-0 m-0 me-auto me-sm-n5" href="/">
<img src="{{ asset('logo/logo-colored.png') }}" class="d-none d-lg-block" style="height:32px;" />
<img src="{{ asset('logo/logo-app.png') }}" class="d-lg-none" style="height:42px;" />
</a>
<!-- Button group -->
<div class="d-flex align-items-center">
<!-- Navbar stuck nav toggler -->
<button type="button" class="navbar-toggler d-none navbar-stuck-show me-3" data-bs-toggle="collapse"
data-bs-target="#stuckNav" aria-controls="stuckNav" aria-expanded="false"
aria-label="Toggle navigation in navbar stuck state">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Theme switcher (light/dark/auto) -->
<div class="dropdown">
<button type="button"
class="theme-switcher btn btn-icon btn-lg btn-outline-secondary fs-lg border-0 rounded-circle animate-scale"
data-bs-toggle="dropdown" aria-expanded="false" aria-label="Toggle theme (light)">
<span class="theme-icon-active d-flex animate-target">
<i class="ci-sun"></i>
</span>
</button>
<ul class="dropdown-menu" style="--cz-dropdown-min-width: 9rem">
<li>
<button type="button" class="dropdown-item active" data-bs-theme-value="light"
aria-pressed="true">
<span class="theme-icon d-flex fs-base me-2">
<i class="ci-sun"></i>
</span>
<span class="theme-label">Light</span>
<i class="item-active-indicator ci-check ms-auto"></i>
</button>
</li>
<li>
<button type="button" class="dropdown-item" data-bs-theme-value="dark"
aria-pressed="false">
<span class="theme-icon d-flex fs-base me-2">
<i class="ci-moon"></i>
</span>
<span class="theme-label">Dark</span>
<i class="item-active-indicator ci-check ms-auto"></i>
</button>
</li>
<li>
<button type="button" class="dropdown-item" data-bs-theme-value="auto"
aria-pressed="false">
<span class="theme-icon d-flex fs-base me-2">
<i class="ci-auto"></i>
</span>
<span class="theme-label">Auto</span>
<i class="item-active-indicator ci-check ms-auto"></i>
</button>
</li>
</ul>
</div>
<!-- Search toggle button visible on screens < 992px wide (lg breakpoint) -->
<button type="button"
class="btn btn-icon btn-lg fs-xl btn-outline-secondary border-0 rounded-circle animate-shake d-lg-none"
data-bs-toggle="offcanvas" data-bs-target="#searchBox" aria-controls="searchBox"
aria-label="Toggle search bar">
<i class="ci-search animate-target"></i>
</button>
<!-- Account button visible on screens > 768px wide (md breakpoint) -->
<a class="btn btn-icon btn-lg fs-lg btn-outline-secondary border-0 rounded-circle animate-shake d-none d-md-inline-flex"
href="{{ route('second', ['account', 'signin']) }}">
<i class="ci-user animate-target"></i>
<span class="visually-hidden">Account</span>
</a>
<!-- Wishlist button visible on screens > 768px wide (md breakpoint) -->
<a class="btn btn-icon btn-lg fs-lg btn-outline-secondary border-0 rounded-circle animate-pulse d-none d-md-inline-flex"
href="#!">
<i class="ci-heart animate-target"></i>
<span class="visually-hidden">Wishlist</span>
</a>
<!-- Cart button -->
<button type="button"
class="btn btn-icon btn-lg fs-xl btn-outline-secondary position-relative border-0 rounded-circle animate-scale"
data-bs-toggle="offcanvas" data-bs-target="#shoppingCart" aria-controls="shoppingCart"
aria-label="Shopping cart">
<span
class="position-absolute top-0 start-100 badge fs-xs text-bg-primary rounded-pill mt-1 ms-n4 z-2"
style="--cz-badge-padding-y: .25em; --cz-badge-padding-x: .42em">3</span>
<i class="ci-shopping-bag animate-target me-1"></i>
</button>
</div>
</div>
<!-- Main navigation that turns into offcanvas on screens < 992px wide (lg breakpoint) -->
<div class="collapse navbar-stuck-hide" id="stuckNav">
<nav class="offcanvas offcanvas-start" id="navbarNav" tabindex="-1" aria-labelledby="navbarNavLabel">
<div class="offcanvas-header py-3">
<h5 class="offcanvas-title" id="navbarNavLabel">Browse Cartzilla</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas"
aria-label="Close"></button>
</div>
<!-- Country and City selects visible on screens < 768px wide (md breakpoint) -->
<div class="offcanvas-header gap-3 d-md-none pt-0 pb-3">
<x-language-selector-sidebar />
<x-location-selector-sidebar />
</div>
<div class="offcanvas-body pt-1 pb-3 py-lg-0">
<div class="container pb-lg-2 px-0 px-lg-3">
<div class="position-relative d-lg-flex align-items-center justify-content-between">
<!-- Categories mega menu -->
<x-layout.navbar-category />
<!-- Navbar nav -->
<x-layout.navbar-menu />
<!-- Search toggle visible on screens > 991px wide (lg breakpoint) -->
<button type="button"
class="btn btn-outline-secondary justify-content-start w-100 px-3 mb-lg-2 ms-3 d-none d-lg-inline-flex"
style="max-width: 240px" data-bs-toggle="offcanvas" data-bs-target="#searchBox"
aria-controls="searchBox">
<i class="ci-search fs-base ms-n1 me-2"></i>
<span class="text-body-tertiary fw-normal">Search</span>
</button>
</div>
</div>
</div>
<!-- Account and Wishlist buttons visible on screens < 768px wide (md breakpoint) -->
<div class="offcanvas-header border-top px-0 py-3 mt-3 d-md-none">
<div class="nav nav-justified w-100">
<a class="nav-link border-end" href="{{ route('second', ['account', 'signin']) }}">
<i class="ci-user fs-lg opacity-60 me-2"></i>
Account
</a>
<a class="nav-link" href="#!">
<i class="ci-heart fs-lg opacity-60 me-2"></i>
Wishlist
</a>
</div>
</div>
</nav>
</div>
</header> </header>
</div>

View File

@ -3,7 +3,7 @@
<button type="button" class="nav-link animate-underline fw-semibold text-uppercase ps-0" data-bs-toggle="dropdown" <button type="button" class="nav-link animate-underline fw-semibold text-uppercase ps-0" data-bs-toggle="dropdown"
data-bs-trigger="hover" data-bs-auto-close="outside" aria-expanded="false"> data-bs-trigger="hover" data-bs-auto-close="outside" aria-expanded="false">
<i class="ci-menu fs-lg me-2"></i> <i class="ci-menu fs-lg me-2"></i>
<span class="animate-target">Categories</span> <span class="animate-target">{{ __('header.categories') }}</span>
</button> </button>
<div class="dropdown-menu w-100 p-4 px-xl-5" style="--cz-dropdown-spacer: .75rem"> <div class="dropdown-menu w-100 p-4 px-xl-5" style="--cz-dropdown-spacer: .75rem">

View File

@ -1,193 +1,7 @@
@extends('layouts.landing', ['title' => 'AsiaGolf Store']) @extends('layouts.landing', ['title' => 'AsiaGolf Store'])
@section('content') @section('content')
<div class="offcanvas offcanvas-end pb-sm-2 px-sm-2" id="shoppingCart" tabindex="-1" aria-labelledby="shoppingCartLabel"
style="width: 500px">
<!-- Header -->
<div class="offcanvas-header flex-column align-items-start py-3 pt-lg-4">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-lg-4">
<h4 class="offcanvas-title" id="shoppingCartLabel">Shopping cart</h4>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<p class="fs-sm">Buy <span class="text-dark-emphasis fw-semibold">$53</span> more to get <span
class="text-dark-emphasis fw-semibold">Free Shipping</span></p>
<div class="progress w-100" role="progressbar" aria-label="Free shipping progress" aria-valuenow="78"
aria-valuemin="0" aria-valuemax="100" style="height: 4px">
<div class="progress-bar bg-dark rounded-pill d-none-dark" style="width: 78%"></div>
<div class="progress-bar bg-light rounded-pill d-none d-block-dark" style="width: 78%"></div>
</div>
</div>
<!-- Items -->
<div class="offcanvas-body d-flex flex-column gap-4 pt-2">
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/07.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Leather sneakers with golden laces</a>
</h5>
<div class="h6 pb-1 mb-2">$74.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove" aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/08.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Classic cotton men's shirt</a>
</h5>
<div class="h6 pb-1 mb-2">$27.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove" aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/09.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Polarized sunglasses for men</a>
</h5>
<div class="h6 pb-1 mb-2">$96.00 <del class="text-body-tertiary fs-xs fw-normal">112.00</del></div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
</div>
<!-- Footer -->
<div class="offcanvas-header flex-column align-items-start">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-md-4">
<span class="text-light-emphasis">Subtotal:</span>
<span class="h6 mb-0">$197.00</span>
</div>
<div class="d-flex w-100 gap-3">
<a class="btn btn-lg btn-secondary w-100" href="#!">View cart</a>
<a class="btn btn-lg btn-dark w-100" href="#!">Checkout</a>
</div>
</div>
</div>
<div class="offcanvas offcanvas-top" id="searchBox" data-bs-backdrop="static" tabindex="-1">
<div class="offcanvas-header border-bottom p-0 py-lg-1">
<form class="container d-flex align-items-center">
<input type="search" class="form-control form-control-lg fs-lg border-0 rounded-0 py-3 ps-0"
placeholder="Search the products" data-autofocus="offcanvas">
<button type="reset" class="btn-close fs-lg" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</form>
</div>
<div class="offcanvas-body px-0">
<div class="container text-center">
<svg class="text-body-tertiary opacity-60 mb-4" xmlns="http://www.w3.org/2000/svg" width="60"
viewBox="0 0 512 512" fill="currentColor">
<path
d="M340.115,361.412l-16.98-16.98c-34.237,29.36-78.733,47.098-127.371,47.098C87.647,391.529,0,303.883,0,195.765S87.647,0,195.765,0s195.765,87.647,195.765,195.765c0,48.638-17.738,93.134-47.097,127.371l16.98,16.98l11.94-11.94c5.881-5.881,15.415-5.881,21.296,0l112.941,112.941c5.881,5.881,5.881,15.416,0,21.296l-45.176,45.176c-5.881,5.881-15.415,5.881-21.296,0L328.176,394.648c-5.881-5.881-5.881-15.416,0-21.296L340.115,361.412z M195.765,361.412c91.484,0,165.647-74.163,165.647-165.647S287.249,30.118,195.765,30.118S30.118,104.28,30.118,195.765S104.28,361.412,195.765,361.412z M360.12,384l91.645,91.645l23.88-23.88L384,360.12L360.12,384z M233.034,233.033c5.881-5.881,15.415-5.881,21.296,0c5.881,5.881,5.881,15.416,0,21.296c-32.345,32.345-84.786,32.345-117.131,0c-5.881-5.881-5.881-15.415,0-21.296c5.881-5.881,15.416-5.881,21.296,0C179.079,253.616,212.45,253.616,233.034,233.033zM135.529,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588c12.475,0,22.588,10.113,22.588,22.588C158.118,170.593,148.005,180.706,135.529,180.706z M256,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588s22.588,10.113,22.588,22.588C278.588,170.593,268.475,180.706,256,180.706z" />
</svg>
<h6 class="mb-2">Your search results will appear here</h6>
<p class="fs-sm mb-0">Start typing in the search field above to see instant search results.</p>
</div>
</div>
</div>
<div class="alert alert-dismissible bg-dark text-white rounded-0 py-2 px-0 m-0 fade show" data-bs-theme="dark">
<div class="container position-relative d-flex min-w-0">
<div class="d-flex flex-nowrap align-items-center g-2 w-100 min-w-0 mx-auto mt-n1" style="max-width: 458px">
<div class="nav me-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarPrev" aria-label="Prev">
<i class="ci-chevron-left"></i>
</button>
</div>
<div class="swiper fs-sm text-white"
data-swiper='{
"spaceBetween": 24,
"loop": true,
"autoplay": {
"delay": 5000,
"disableOnInteraction": false
},
"navigation": {
"prevEl": "#topbarPrev",
"nextEl": "#topbarNext"
}
}'>
<div class="swiper-wrapper min-w-0">
<div class="swiper-slide text-truncate text-center">🎉 Free Shipping on orders over $250. <span
class="d-none d-sm-inline">Don't miss a discount!</span></div>
<div class="swiper-slide text-truncate text-center">💰 Money back guarantee. <span
class="d-none d-sm-inline">We return money within 30 days.</span></div>
<div class="swiper-slide text-truncate text-center">💪 Friendly 24/7 customer support. <span
class="d-none d-sm-inline">We've got you covered!</span></div>
</div>
</div>
<div class="nav ms-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarNext" aria-label="Next">
<i class="ci-chevron-right"></i>
</button>
</div>
</div>
<button type="button" class="btn-close position-static flex-shrink-0 p-1 ms-3 ms-md-n4"
data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<x-layout.header /> <x-layout.header />

View File

@ -1,193 +1,7 @@
@extends('layouts.landing', ['title' => 'Fashion Store - Catalog']) @extends('layouts.landing', ['title' => 'Fashion Store - Catalog'])
@section('content') @section('content')
<div class="offcanvas offcanvas-end pb-sm-2 px-sm-2" id="shoppingCart" tabindex="-1" aria-labelledby="shoppingCartLabel"
style="width: 500px">
<!-- Header -->
<div class="offcanvas-header flex-column align-items-start py-3 pt-lg-4">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-lg-4">
<h4 class="offcanvas-title" id="shoppingCartLabel">Shopping cart</h4>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<p class="fs-sm">Buy <span class="text-dark-emphasis fw-semibold">$53</span> more to get <span
class="text-dark-emphasis fw-semibold">Free Shipping</span></p>
<div class="progress w-100" role="progressbar" aria-label="Free shipping progress" aria-valuenow="78"
aria-valuemin="0" aria-valuemax="100" style="height: 4px">
<div class="progress-bar bg-dark rounded-pill d-none-dark" style="width: 78%"></div>
<div class="progress-bar bg-light rounded-pill d-none d-block-dark" style="width: 78%"></div>
</div>
</div>
<!-- Items -->
<div class="offcanvas-body d-flex flex-column gap-4 pt-2">
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/07.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Leather sneakers with golden laces</a>
</h5>
<div class="h6 pb-1 mb-2">$74.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove" aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/08.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Classic cotton men's shirt</a>
</h5>
<div class="h6 pb-1 mb-2">$27.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove" aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="{{ route('second', ['shop', 'product-fashion']) }}">
<img src="/img/shop/fashion/thumbs/09.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target"
href="{{ route('second', ['shop', 'product-fashion']) }}">Polarized sunglasses for men</a>
</h5>
<div class="h6 pb-1 mb-2">$96.00 <del class="text-body-tertiary fs-xs fw-normal">112.00</del></div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
</div>
<!-- Footer -->
<div class="offcanvas-header flex-column align-items-start">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-md-4">
<span class="text-light-emphasis">Subtotal:</span>
<span class="h6 mb-0">$197.00</span>
</div>
<div class="d-flex w-100 gap-3">
<a class="btn btn-lg btn-secondary w-100" href="#!">View cart</a>
<a class="btn btn-lg btn-dark w-100" href="#!">Checkout</a>
</div>
</div>
</div>
<div class="offcanvas offcanvas-top" id="searchBox" data-bs-backdrop="static" tabindex="-1">
<div class="offcanvas-header border-bottom p-0 py-lg-1">
<form class="container d-flex align-items-center">
<input type="search" class="form-control form-control-lg fs-lg border-0 rounded-0 py-3 ps-0"
placeholder="Search the products" data-autofocus="offcanvas">
<button type="reset" class="btn-close fs-lg" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</form>
</div>
<div class="offcanvas-body px-0">
<div class="container text-center">
<svg class="text-body-tertiary opacity-60 mb-4" xmlns="http://www.w3.org/2000/svg" width="60"
viewBox="0 0 512 512" fill="currentColor">
<path
d="M340.115,361.412l-16.98-16.98c-34.237,29.36-78.733,47.098-127.371,47.098C87.647,391.529,0,303.883,0,195.765S87.647,0,195.765,0s195.765,87.647,195.765,195.765c0,48.638-17.738,93.134-47.097,127.371l16.98,16.98l11.94-11.94c5.881-5.881,15.415-5.881,21.296,0l112.941,112.941c5.881,5.881,5.881,15.416,0,21.296l-45.176,45.176c-5.881,5.881-15.415,5.881-21.296,0L328.176,394.648c-5.881-5.881-5.881-15.416,0-21.296L340.115,361.412z M195.765,361.412c91.484,0,165.647-74.163,165.647-165.647S287.249,30.118,195.765,30.118S30.118,104.28,30.118,195.765S104.28,361.412,195.765,361.412z M360.12,384l91.645,91.645l23.88-23.88L384,360.12L360.12,384z M233.034,233.033c5.881-5.881,15.415-5.881,21.296,0c5.881,5.881,5.881,15.416,0,21.296c-32.345,32.345-84.786,32.345-117.131,0c-5.881-5.881-5.881-15.415,0-21.296c5.881-5.881,15.416-5.881,21.296,0C179.079,253.616,212.45,253.616,233.034,233.033zM135.529,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588c12.475,0,22.588,10.113,22.588,22.588C158.118,170.593,148.005,180.706,135.529,180.706z M256,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588s22.588,10.113,22.588,22.588C278.588,170.593,268.475,180.706,256,180.706z" />
</svg>
<h6 class="mb-2">Your search results will appear here</h6>
<p class="fs-sm mb-0">Start typing in the search field above to see instant search results.</p>
</div>
</div>
</div>
<div class="alert alert-dismissible bg-dark text-white rounded-0 py-2 px-0 m-0 fade show" data-bs-theme="dark">
<div class="container position-relative d-flex min-w-0">
<div class="d-flex flex-nowrap align-items-center g-2 w-100 min-w-0 mx-auto mt-n1" style="max-width: 458px">
<div class="nav me-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarPrev" aria-label="Prev">
<i class="ci-chevron-left"></i>
</button>
</div>
<div class="swiper fs-sm text-white"
data-swiper='{
"spaceBetween": 24,
"loop": true,
"autoplay": {
"delay": 5000,
"disableOnInteraction": false
},
"navigation": {
"prevEl": "#topbarPrev",
"nextEl": "#topbarNext"
}
}'>
<div class="swiper-wrapper min-w-0">
<div class="swiper-slide text-truncate text-center">🎉 Free Shipping on orders over $250. <span
class="d-none d-sm-inline">Don't miss a discount!</span></div>
<div class="swiper-slide text-truncate text-center">💰 Money back guarantee. <span
class="d-none d-sm-inline">We return money within 30 days.</span></div>
<div class="swiper-slide text-truncate text-center">💪 Friendly 24/7 customer support. <span
class="d-none d-sm-inline">We've got you covered!</span></div>
</div>
</div>
<div class="nav ms-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarNext" aria-label="Next">
<i class="ci-chevron-right"></i>
</button>
</div>
</div>
<button type="button" class="btn-close position-static flex-shrink-0 p-1 ms-3 ms-md-n4"
data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<x-layout.header /> <x-layout.header />
@ -310,21 +124,19 @@
aria-labelledby="headingPrice"> aria-labelledby="headingPrice">
<div class="accordion-body p-0 pb-4 mb-1 mb-xl-2"> <div class="accordion-body p-0 pb-4 mb-1 mb-xl-2">
<div class="range-slider" <div class="range-slider"
data-range-slider='{"startMin": 40, "startMax": 150, "min": 0, "max": 200, "step": 1, "tooltipPrefix": "$"}' data-range-slider='{"startMin": 0, "startMax": {{ $min_max_price['max'] }}, "min": 0, "max": {{ $min_max_price['max'] }}, "step": 1000000, "tooltipPrefix": "Rp"}'
aria-labelledby="headingPrice"> aria-labelledby="headingPrice">
<div class="range-slider-ui"></div> <div class="range-slider-ui"></div>
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="position-relative w-50"> <div class="position-relative w-50">
<i
class="ci-dollar-sign position-absolute top-50 start-0 translate-middle-y ms-3"></i> <input type="number" class="form-control"
<input type="number" class="form-control form-icon-start"
min="0" data-range-slider-min> min="0" data-range-slider-min>
</div> </div>
<i class="ci-minus text-body-emphasis mx-2"></i> <i class="ci-minus text-body-emphasis mx-2"></i>
<div class="position-relative w-50"> <div class="position-relative w-50">
<i
class="ci-dollar-sign position-absolute top-50 start-0 translate-middle-y ms-3"></i> <input type="number" class="form-control"
<input type="number" class="form-control form-icon-start"
min="0" data-range-slider-max> min="0" data-range-slider-max>
</div> </div>
</div> </div>
@ -677,7 +489,7 @@
<option value="popularity" {{ request('sort_by') == 'popularity' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_popularity') }}</option> <option value="popularity" {{ request('sort_by') == 'popularity' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_popularity') }}</option>
<option value="price_low_to_high" {{ request('sort_by') == 'price_low_to_high' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_price_low_to_high') }}</option> <option value="price_low_to_high" {{ request('sort_by') == 'price_low_to_high' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_price_low_to_high') }}</option>
<option value="price_high_to_low" {{ request('sort_by') == 'price_high_to_low' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_price_high_to_low') }}</option> <option value="price_high_to_low" {{ request('sort_by') == 'price_high_to_low' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_price_high_to_low') }}</option>
<option value="newest_arrivals" {{ request('sort_by') == 'newest_arrivals' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_newest_arrivals') }}</option> <option value="new" {{ request('sort_by') == 'newest_arrivals' ? 'selected' : '' }}>{{ __('catalog_fashion.sort_newest_arrivals') }}</option>
</select> </select>
</div> </div>
</div> </div>

View File

@ -403,195 +403,7 @@
</div> </div>
</div> </div>
<div class="offcanvas offcanvas-end pb-sm-2 px-sm-2" id="shoppingCart" tabindex="-1"
aria-labelledby="shoppingCartLabel" style="width: 500px">
<!-- Header -->
<div class="offcanvas-header flex-column align-items-start py-3 pt-lg-4">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-lg-4">
<h4 class="offcanvas-title" id="shoppingCartLabel">Shopping cart</h4>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<p class="fs-sm">Buy <span class="text-dark-emphasis fw-semibold">$53</span> more to get <span
class="text-dark-emphasis fw-semibold">Free Shipping</span></p>
<div class="progress w-100" role="progressbar" aria-label="Free shipping progress" aria-valuenow="78"
aria-valuemin="0" aria-valuemax="100" style="height: 4px">
<div class="progress-bar bg-dark rounded-pill d-none-dark" style="width: 78%"></div>
<div class="progress-bar bg-light rounded-pill d-none d-block-dark" style="width: 78%"></div>
</div>
</div>
<!-- Items -->
<div class="offcanvas-body d-flex flex-column gap-4 pt-2">
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="#!">
<img src="/img/shop/fashion/thumbs/07.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target" href="#!">Leather sneakers
with golden laces</a>
</h5>
<div class="h6 pb-1 mb-2">$74.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="#!">
<img src="/img/shop/fashion/thumbs/08.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target" href="#!">Classic cotton
men's shirt</a>
</h5>
<div class="h6 pb-1 mb-2">$27.00</div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
<!-- Item -->
<div class="d-flex align-items-center">
<a class="flex-shrink-0" href="#!">
<img src="/img/shop/fashion/thumbs/09.png" class="bg-body-tertiary rounded" width="110"
alt="Thumbnail">
</a>
<div class="w-100 min-w-0 ps-3">
<h5 class="d-flex animate-underline mb-2">
<a class="d-block fs-sm fw-medium text-truncate animate-target" href="#!">Polarized
sunglasses for men</a>
</h5>
<div class="h6 pb-1 mb-2">$96.00 <del class="text-body-tertiary fs-xs fw-normal">112.00</del></div>
<div class="d-flex align-items-center justify-content-between">
<div class="count-input rounded-2">
<button type="button" class="btn btn-icon btn-sm" data-decrement
aria-label="Decrement quantity">
<i class="ci-minus"></i>
</button>
<input type="number" class="form-control form-control-sm" value="1" readonly>
<button type="button" class="btn btn-icon btn-sm" data-increment
aria-label="Increment quantity">
<i class="ci-plus"></i>
</button>
</div>
<button type="button" class="btn-close fs-sm" data-bs-toggle="tooltip"
data-bs-custom-class="tooltip-sm" data-bs-title="Remove"
aria-label="Remove from cart"></button>
</div>
</div>
</div>
</div>
<!-- Footer -->
<div class="offcanvas-header flex-column align-items-start">
<div class="d-flex align-items-center justify-content-between w-100 mb-3 mb-md-4">
<span class="text-light-emphasis">Subtotal:</span>
<span class="h6 mb-0">$197.00</span>
</div>
<div class="d-flex w-100 gap-3">
<a class="btn btn-lg btn-secondary w-100" href="#!">View cart</a>
<a class="btn btn-lg btn-dark w-100" href="#!">Checkout</a>
</div>
</div>
</div>
<div class="offcanvas offcanvas-top" id="searchBox" data-bs-backdrop="static" tabindex="-1">
<div class="offcanvas-header border-bottom p-0 py-lg-1">
<form class="container d-flex align-items-center">
<input type="search" class="form-control form-control-lg fs-lg border-0 rounded-0 py-3 ps-0"
placeholder="Search the products" data-autofocus="offcanvas">
<button type="reset" class="btn-close fs-lg" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</form>
</div>
<div class="offcanvas-body px-0">
<div class="container text-center">
<svg class="text-body-tertiary opacity-60 mb-4" xmlns="http://www.w3.org/2000/svg" width="60"
viewBox="0 0 512 512" fill="currentColor">
<path
d="M340.115,361.412l-16.98-16.98c-34.237,29.36-78.733,47.098-127.371,47.098C87.647,391.529,0,303.883,0,195.765S87.647,0,195.765,0s195.765,87.647,195.765,195.765c0,48.638-17.738,93.134-47.097,127.371l16.98,16.98l11.94-11.94c5.881-5.881,15.415-5.881,21.296,0l112.941,112.941c5.881,5.881,5.881,15.416,0,21.296l-45.176,45.176c-5.881,5.881-15.415,5.881-21.296,0L328.176,394.648c-5.881-5.881-5.881-15.416,0-21.296L340.115,361.412z M195.765,361.412c91.484,0,165.647-74.163,165.647-165.647S287.249,30.118,195.765,30.118S30.118,104.28,30.118,195.765S104.28,361.412,195.765,361.412z M360.12,384l91.645,91.645l23.88-23.88L384,360.12L360.12,384z M233.034,233.033c5.881-5.881,15.415-5.881,21.296,0c5.881,5.881,5.881,15.416,0,21.296c-32.345,32.345-84.786,32.345-117.131,0c-5.881-5.881-5.881-15.415,0-21.296c5.881-5.881,15.416-5.881,21.296,0C179.079,253.616,212.45,253.616,233.034,233.033zM135.529,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588c12.475,0,22.588,10.113,22.588,22.588C158.118,170.593,148.005,180.706,135.529,180.706z M256,180.706c-12.475,0-22.588-10.113-22.588-22.588c0-12.475,10.113-22.588,22.588-22.588s22.588,10.113,22.588,22.588C278.588,170.593,268.475,180.706,256,180.706z" />
</svg>
<h6 class="mb-2">Your search results will appear here</h6>
<p class="fs-sm mb-0">Start typing in the search field above to see instant search results.</p>
</div>
</div>
</div>
<div class="alert alert-dismissible bg-dark text-white rounded-0 py-2 px-0 m-0 fade show" data-bs-theme="dark">
<div class="container position-relative d-flex min-w-0">
<div class="d-flex flex-nowrap align-items-center g-2 w-100 min-w-0 mx-auto mt-n1" style="max-width: 458px">
<div class="nav me-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarPrev" aria-label="Prev">
<i class="ci-chevron-left"></i>
</button>
</div>
<div class="swiper fs-sm text-white"
data-swiper='{
"spaceBetween": 24,
"loop": true,
"autoplay": {
"delay": 5000,
"disableOnInteraction": false
},
"navigation": {
"prevEl": "#topbarPrev",
"nextEl": "#topbarNext"
}
}'>
<div class="swiper-wrapper min-w-0">
<div class="swiper-slide text-truncate text-center">🎉 Free Shipping on orders over $250. <span
class="d-none d-sm-inline">Don't miss a discount!</span></div>
<div class="swiper-slide text-truncate text-center">💰 Money back guarantee. <span
class="d-none d-sm-inline">We return money within 30 days.</span></div>
<div class="swiper-slide text-truncate text-center">💪 Friendly 24/7 customer support. <span
class="d-none d-sm-inline">We've got you covered!</span></div>
</div>
</div>
<div class="nav ms-2">
<button type="button" class="nav-link fs-lg p-0" id="topbarNext" aria-label="Next">
<i class="ci-chevron-right"></i>
</button>
</div>
</div>
<button type="button" class="btn-close position-static flex-shrink-0 p-1 ms-3 ms-md-n4"
data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<x-layout.header /> <x-layout.header />