Compare commits

...

2 Commits

Author SHA1 Message Date
bayu b00378ba8f product grid 2025-12-30 16:08:16 +07:00
bayu c384576119 init brand 2025-12-30 11:18:57 +07:00
30 changed files with 1564 additions and 756 deletions

View File

@ -63,3 +63,6 @@ AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}" VITE_APP_NAME="${APP_NAME}"
WMS_ASSET_URL="https://dev.smgdev.top/api/storage"

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index(Request $request)
{
return view('home.fashion-v1');
}
}

48
app/Models/Brand.php Normal file
View File

@ -0,0 +1,48 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Storage;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;
class Brand extends Model
{
use HasFactory, SoftDeletes;
use LogsActivity;
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults();
}
protected $table = 'brands';
protected $primaryKey = 'id';
protected $fillable = [
'name',
'code',
'image',
'hide_point',
'priority'
];
public function items()
{
return $this->hasMany(Items::class, 'brand_id', 'id');
}
public function getImageUrlAttribute()
{
return $this->image ? Storage::disk('wms')->url($this->image) : null;
}
public function getImageDarkUrlAttribute()
{
return $this->image ? Storage::disk('wms')->url($this->image) : null;
}
}

33
app/Models/Discount.php Normal file
View File

@ -0,0 +1,33 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;
class Discount extends Model
{
use HasFactory;
use LogsActivity;
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults();
}
protected $fillable = ['name', 'valid_at', 'expired_at', 'customer_group_id', 'discount_percent','location_id', 'type', 'apply_point', 'apply_incentive'];
public function discountItems() {
return $this->hasMany(DiscountItem::class);
}
public function customerGroup() {
return $this->belongsTo(CustomerGroup::class);
}
public function location() {
return $this->belongsTo(Location::class);
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class DiscountItem extends Model
{
use HasFactory;
protected $fillable = ['item_reference_id', 'price', 'discount_id', 'percent', 'original_price'];
public function itemReference()
{
return $this->belongsTo(ItemReference::class);
}
public function discount()
{
return $this->belongsTo(Discount::class);
}
}

13
app/Models/ItemImage.php Normal file
View File

@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ItemImage extends Model
{
use HasFactory;
protected $fillable = ["filename", "item_id", "item_reference_id", "item_variant_id", "is_main"];
}

View File

@ -0,0 +1,203 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Awobaz\Compoships\Compoships;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Cache;
class ItemReference extends Model
{
use HasFactory, Compoships;
protected $table = 'item_reference';
protected $primaryKey = 'id';
protected $fillable = ['item_id','item_variant_id','number','unit'];
public function images()
{
return $this->hasMany(ItemImage::class, 'item_id', 'item_id');
}
public function item()
{
return $this->belongsTo(Items::class)->with("brand", "gender", "category");
}
public function itemVariant()
{
return $this->belongsTo(ItemVariant::class);
}
public function variants()
{
$model = ItemVariant::where('item_id', $this->item_id)->get();
return $model;
}
public function location()
{
return $this->belongsTo(Location::class, "location_id");
}
public function stocks()
{
return $this->hasMany(Stock::class, ["item_id", "item_variant_id"], ["item_id", "item_variant_id"])
->with("location");
}
public function bucketStocks()
{
return $this->hasMany(BucketStock::class)->with("bucket");
// ->where("quantity",">",0);
}
public function promotion()
{
return $this->belongsToMany(Promotion::class, "promotion_item", "item_id", "promotion_id");
}
public function price()
{
$user = auth()->user();
[$location_id, $is_consignment] = Cache::remember(
"employee_user_" . optional($user)->id,
60,
function () use ($user) {
if (!$user) {
return [10, false];
}
$employee = $user->employee;
$location_id = $employee->location_id ?? 10;
$location = $employee->location;
$is_consignment = (bool) optional($location)->is_consignment
&& optional($location)->id != 9;
return [$location_id, $is_consignment];
}
);
return $this->hasOne(Discount::class, 'id', 'item_reference_id')
->leftJoin('discount_items', 'discount_items.discount_id', '=', 'discounts.id')
->where('discounts.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);
}
})
->orderByDesc('discounts.created_at')
->select([
'discount_items.item_reference_id',
'discount_items.price',
]);
}
public function discount()
{
$user = auth()->user();
list($location_id, $is_consignment) = Cache::remember("employee_user_".$user->id, 60 * 60 * 24, function(){
$employee = @$user->employee;
$location_id = @$employee->location_id ?? 10;
$location = @$employee->location;
$is_consignment = (boolean) @$location->is_consignment && $location->id != 9;
return [$location_id, $is_consignment];
});
// Log::info([$location_id, $is_consignment]);
return $this->hasOne(Discount::class,DB::raw("discount_items.item_reference_id"))
->leftJoin("discount_items","discounts.id","=","discount_id")
->where("discounts.type","discount")
->orderBy("discounts.created_at","desc")
->where(function($query){
$query->where("valid_at", "<=", Carbon::now())
->orWhereNull("valid_at");
})
->where(function($query){
$query->where("expired_at", ">", Carbon::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);
})
->select("item_reference_id","price");
}
public function point()
{
return $this->hasOne(CustomerPointRule::class);
}
public function promotion3()
{
$now = Carbon::now()->format('Y-m-d');
$promotions = "select DISTINCT ON (item_id) item_id as item_reference_id, name, note from
promotions left join promotion_item on promotions.id = promotion_id
where (valid_date is null or valid_date::date <= '$now')
and (expired_date is null or expired_date::date >= '$now')
and type <> 'POINT'";
$points = "select item_reference_id, array_agg((case when qty is null then '' else (qty || ': ') end) || point || ' Point' order by point asc) as name
from customer_point_rules
group by item_reference_id";
return $this->hasOne(ItemReference::class,"id")
->select('item_reference.id as item_reference_id',DB::raw("(case when points.name is null then promotions.name else array_to_string(points.name,', ') end) as promotion"),'promotions.note as promotion_note')
->leftJoin(DB::raw("(" . $promotions . ") as promotions"), "promotions.item_reference_id", "=", "item_reference.id")
->leftJoin(DB::raw("(" . $points . ") as points"), "points.item_reference_id", "=", "item_reference.id");
}
public function promotion2()
{
$now = Carbon::now()->format('Y-m-d');
$promotions = "select DISTINCT ON (item_id) item_id, name, note from
promotions left join promotion_item on promotions.id = promotion_id
where (valid_date is null or valid_date::date <= '$now')
and (expired_date is null or expired_date::date >= '$now')
and item_id = $this->id
and type <> 'POINT'";
$points = "select item_reference_id, array_agg((case when qty is null then '' else (qty || ': ') end) || point || ' Point' order by point asc) as name
from customer_point_rules
where item_reference_id = $this->id
group by item_reference_id";
$result = DB::table('item_reference')
->select(DB::raw("(case when points.name is null then promotions.name else array_to_string(points.name,', ') end) as promotion"),
'promotions.note as promotion_note')
->leftJoin(DB::raw("(" . $promotions . ") as promotions"), "promotions.item_id", "=", "item_reference.id")
->leftJoin(DB::raw("(" . $points . ") as points"), "points.item_reference_id", "=", "item_reference.id")
->where('item_reference.id', $this->id)
->first();
return $result;
}
}

View File

@ -0,0 +1,53 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Awobaz\Compoships\Compoships;
class ItemVariant extends Model
{
use HasFactory;
use Compoships;
protected $table = 'item_variants';
protected $primaryKey = 'id';
protected $fillable = [
'id',
'code',
'description',
'item_id',
'display_name',
'is_publish',
'barcode',
'variant_name',
];
public function reference()
{
return $this->belongsTo(ItemReference::class, ["item_id", "id"], ["item_id", "item_variant_id"]);
}
public function variables()
{
return $this->belongsToMany(Variant::class, "variant_value")->select("id", "name", "value");
}
public function image()
{
return $this->hasOne(ItemImage::class)->where('item_id', $this->item_id);
}
public function images()
{
return $this->hasMany(ItemImage::class)->where('item_id', $this->item_id);
}
public function variantValue()
{
return $this->hasMany(\App\Models\VariantValue::class, 'item_variant_id');
}
}

324
app/Models/Items.php Normal file
View File

@ -0,0 +1,324 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
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\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Awobaz\Compoships\Compoships;
use Spatie\Activitylog\LogOptions;
use Illuminate\Support\Facades\Storage;
class Items extends Model
{
use HasFactory, SoftDeletes;
use Compoships;
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults();
}
// protected $with = ['brands', 'categories'];
protected $table = 'items';
protected $primaryKey = 'id';
protected $guarded = ['id'];
protected $fillable = [
'number',
'name',
'brand_id',
'category_id',
'image',
'description',
'weight',
'is_publish',
// BC data
'type',
'unit',
'display_unit',
'unit_cost',
'costing_method',
'last_direct_cost',
'unit_price',
'price_include_vat',
'sales_blocked',
'purchasing_blocked',
'profit_percent',
'net_weight',
'gross_weight',
'unit_volume',
'net_price',
'ref_id',
// purchase,
'alias_name',
'group_type',
'model_type',
'slug'
];
public function scopeFilter(Builder $query, array $filters)
{
$query->when($filters['search'] ?? false, function ($query, $search) {
return $query
->where('number', 'iLIKE', '%' . $search . '%')
->orWhere('name', 'iLIKE', '%' . $search . '%');
});
}
public function order()
{
return $this->hasMany(SaleOrderDetail::class, 'item_id', 'id');
}
public function dimension()
{
return $this->hasOne(ItemDimension::class,"no","number");
}
public function reference()
{
return $this->hasOne(ItemReference::class,'item_id')
->where(function($query){
$query->whereNull("item_variant_id")->orWhere("item_variant_id",0);
});
}
public function variants()
{
return $this->hasMany(ItemVariant::class,"item_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")
->groupBy("item_variants.id","item_variants.code","description","item_variants.item_id","item_variants.display_name","item_variants.is_publish");
}
public function images()
{
return $this->hasMany(ItemImage::class,'item_id')->whereNull('item_variant_id');
}
public function itemVariants()
{
return $this->hasMany(ItemVariant::class,"item_id")->with("reference");
}
public function publishedItemVariants()
{
return $this->hasMany(ItemVariant::class,"item_id")->with("reference")->where('is_publish', true);
}
public function brands()
{
return $this->belongsTo(Brand::class, 'brand_id', 'id');
}
public function categories()
{
return $this->belongsTo(Categories::class, 'categories_id', 'id');
}
public function brand()
{
return $this->belongsTo(Brand::class, 'brand_id', 'id');
}
public function gender()
{
return $this->belongsTo(Gender::class, 'gender_id', 'id');
}
public function category()
{
return $this->belongsTo(Categories::class, 'category_id', 'id');
}
public function discount()
{
$user = auth()->user();
[$location_id, $is_consignment] = Cache::remember(
'employee_user_' . optional($user)->id,
60 * 60 * 24,
function () use ($user) {
if (!$user) {
return [10, false];
}
$employee = $user->employee;
$location = $employee?->location;
return [
$employee?->location_id,
(bool) optional($location)->is_consignment,
];
}
);
// return $this->hasOne(Discount::class,DB::raw("item_reference.item_id"))
// ->leftJoin('discount_items', 'discount_items.discount_id', '=', 'discounts.id')
// ->leftJoin('item_reference', 'item_reference.id', '=', 'discount_items.item_reference_id')
// ->where('discounts.type', 'discount')
// ->where(function ($query) {
// $query->whereNull('valid_at')
// ->orWhere('valid_at', '<=', now());
// })
// ->where(function ($query) {
// $query->whereNull('expired_at')
// ->orWhere('expired_at', '>=', now());
// })
// ->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);
// }
// })
// ->orderByDesc('discounts.created_at')
// ->select([
// 'item_reference.item_id',
// 'discount_items.price',
// ]);
return $this->hasOne(DiscountItem::class, 'item_reference_id', 'id')
->leftJoin('discounts', 'discounts.id', '=', 'discount_items.discount_id')
->leftJoin('item_reference', 'item_reference.id', '=', 'discount_items.item_reference_id')
->where('discounts.type', 'discount')
->where(function ($q) {
$q->whereNull('discounts.valid_at')
->orWhere('discounts.valid_at', '<=', now());
})
->where(function ($q) {
$q->whereNull('discounts.expired_at')
->orWhere('discounts.expired_at', '>=', now());
})
->where(function ($q) use ($location_id, $is_consignment) {
if (!$is_consignment) {
$q->whereNull('discounts.location_id');
}
if ($location_id) {
$q->orWhere('discounts.location_id', $location_id);
}
})
->orderByDesc('discounts.created_at')
->select([
'item_reference.item_id',
'discount_items.price',
]);
}
public function price()
{
$user = auth()->user();
$userId = $user ? $user->id : 0;
list($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 = (boolean) @$location->is_consignment;
return [$location_id, $is_consignment];
});
return $this->hasOne(Discount::class,DB::raw("item_reference.item_id"))
->leftJoin("discount_items","discounts.id","=","discount_id")
->leftJoin("item_reference","item_reference.id","=","item_reference_id")
->where("discounts.type","price")
->orderBy("discounts.created_at","desc")
->where(function ($query) {
$query->whereNull("valid_at")
->orWhereDate("valid_at", "<=", Carbon::now());
})
->where(function ($query) {
$query->whereNull("expired_at")
->orWhereDate("expired_at", ">=", Carbon::now());
})
->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);
})
->select("item_id","price");
}
public function stock()
{
return $this->hasOne(Stock::class,"item_id")
->leftJoin("locations","locations.id","=","location_id")
->whereNotNull("locations.display_name")
->where("locations.display_name","<>","")
->where("quantity",">","0")
->groupBy("item_id")
->select("item_id",DB::raw("SUM(quantity) as quantity"));
}
public function attributes()
{
return $this->hasMany(ItemAttribute::class, 'item_id');
}
public function getImageUrlAttribute()
{
$image = $this->images->first()->filename ?? null;
if (str_contains($image,"http")) {
return $image;
}
return $image ? Storage::disk('wms')->url($image) : null;
}
public function conversion_value()
{
$convertion = 1;
if (($this->display_unit != $this->unit) and ($this->display_unit)){
$convertions = DB::select("select to_qty / from_qty as conv
from item_convertions where from_unit = ? and to_unit = ?",
[$this->display_unit, $this->unit] );
$convertion = max((float) @$convertions[0]->conv,1);
}
return $convertion;
}
public function getDisplayPriceAttribute()
{
$convertion = $this->conversion_value();
$price = @$this->variants->first()->reference->price->price ?? null;
$price = $price ? $price : $this->net_price;
return (float) $price * $convertion;
}
public function getDisplayDiscountPriceAttribute()
{
$convertion = $this->conversion_value();
$discountPrice = @$this->discount->price ?? 0;
return (float) $discountPrice * $convertion;
}
}

88
app/Models/Location.php Normal file
View File

@ -0,0 +1,88 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;
class Location extends Model
{
use HasFactory, SoftDeletes;
use LogsActivity;
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults();
}
protected $table = 'locations';
protected $primaryKey = 'id';
protected $fillable = [
'code',
'name',
'address',
'city',
'phone',
'longitude',
'latitude',
'md_id',
'display_name',
'is_consignment',
'postal_code'
];
public function scopeFilter(Builder $query, array $filters)
{
$query->when($filters['search'] ?? false, function ($query, $search) {
return $query
->where('name', 'iLIKE', '%' . $search . '%')
->orWhere('code', 'LIKE', '%' . $search . '%');
});
}
public function md()
{
return $this->belongsTo(Employee::class);
}
public function storeCategory()
{
return $this->hasMany(StoreCapacity::class, "location_id", "id")
->selectRaw("
store_category.id,
store_category.name,
store_capacity.max::int,
COALESCE(b.qty, 0)::int as qty,
COALESCE(b.sku, 0)::int as sku,
(CASE WHEN COALESCE(b.qty, 0) = 0 OR store_capacity.max = 0 THEN 0 ELSE (qty / max * 100) END) as percentage
")
->leftJoin("store_category", "store_capacity.store_category_id", "store_category.id")
->leftJoin(DB::raw("(SELECT
c.store_category_id,
SUM(stocks.quantity) as qty,
count(distinct item_reference.number) as sku
FROM (SELECT item_dimension.no, store_category_map.store_category_id FROM store_category_map
LEFT JOIN item_dimension
ON (store_category_map.category1 = item_dimension.category1 OR store_category_map.category1 is null)
AND (store_category_map.category2 = item_dimension.category2 OR store_category_map.category2 is null)
AND (store_category_map.category3 = item_dimension.category3 OR store_category_map.category3 is null)
AND (store_category_map.category4 = item_dimension.category4 OR store_category_map.category4 is null)
GROUP BY item_dimension.no, store_category_map.store_category_id
) c
LEFT JOIN items
ON items.number = c.no
LEFT JOIN item_reference
ON items.id = item_reference.item_id
LEFT JOIN stocks
ON stocks.item_id = item_reference.item_id AND stocks.item_variant_id = item_reference.item_variant_id
WHERE stocks.location_id = $this->id and stocks.quantity > 0
GROUP BY c.store_category_id
) b"), "store_capacity.store_category_id", "b.store_category_id");
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class StoreCapacity extends Model
{
use HasFactory;
protected $table = 'store_capacity';
protected $fillable = ['store_category_id', 'location_id', 'max'];
public function location() {
return $this->belongsTo(Location::class);
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class StoreCategory extends Model
{
use HasFactory;
protected $table = 'store_category';
protected $fillable = ['name', 'image'];
public function categories()
{
return $this->hasMany(StoreCategoryMap::class);
}
public function locations()
{
return $this->hasMany(StoreCapacity::class);
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class StoreCategoryMap extends Model
{
use HasFactory;
protected $table = "store_category_map";
protected $fillable = ['store_category_id', 'category1', 'category2', 'category3', 'category4'];
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Repositories\Catalog;
use App\Models\Brand;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Illuminate\Support\Facades\Cache;
use Image;
use Storage;
class BrandRepository
{
public function getList($params){
return Cache::remember("catalog_brand_".json_encode($params),60, function() use ($params) {
$category_id = @$params["category_id"];
if ($category_id){
$ids = DB::select("select distinct brand from store_category_map a
left join item_dimension b
left join items on b.no = items.number
on a.category1 = b.category1
and (a.category2 = b.category2 or a.category2 is null)
and (a.category3 = b.category3 or a.category3 is null)
and (a.category4 = b.category4 or a.category4 is null)
where store_category_id = ?
and items.is_publish = true ",[$category_id]);
$ids = collect($ids)->pluck("brand");
return Brand::whereIn("name",$ids)->orderBy('priority', 'desc')
->where("priority",">",0)
->orderBy('name', 'asc')->get();
}
return Brand::orderBy('priority', 'desc')->orderBy('name', 'asc')
->where("priority",">",0)
->get();
});
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Repositories\Catalog;
use App\Models\StoreCategory as Category;
use DB;
use Carbon\Carbon;
use Image;
use Storage;
class CategoryRepository
{
public function getList($params){
return Category::get();
}
}

View File

@ -0,0 +1,97 @@
<?php
namespace App\Repositories\Catalog;
use App\Models\Items;
use App\Models\StoreCategoryMap;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class ProductRepository
{
public function getList($params)
{
$event = @$params["event"];
$sort = @$params["sort"];
$search = @$params["search"];
$category_id = @$params["category_id"];
$brand_id = @$params["brand_id"];
$gender_id = @$params["gender_id"];
$limit = @$params["limit"];
$builder = Items::select('items.*','percent')
->leftJoin('item_dimension', 'item_dimension.no', 'items.number')
->leftJoin(DB::raw("(select distinct on (item_id) item_id, percent, discounts.created_at,
case when discounts.valid_at is null then 'special-offer' else 'limited-sale' end as event
from discount_items
left join item_reference on item_reference_id = item_reference.id
left join discounts on discounts.id = discount_id
where discounts.type = 'discount' and
( discounts.valid_at is null or discounts.valid_at <= now()) and
( discounts.valid_at is null or discounts.expired_at >= now())
order by item_id, discounts.created_at desc
) as d"),"d.item_id","=","items.id")
->when(true, function($query) use ($event, $sort){
if ($event){
$query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC ");
$query->orderBy("percent", "desc");
}else{
/* if ($event == "special-offer"){
$query->orderByRaw("case when brand = 'CHAMELO' then 1 else 2 end ASC ");
} */
if ($sort == "new"){
\Log::info($sort);
$query->orderByRaw("case when category1 in ('CLUBS','CLUB','COMPONENT HEAD') and brand = 'PXG' then 1 else 2 end ASC");
}else{
$query->orderByRaw("case when d.created_at is not null then 1 else 2 end ASC, random()");
}
// $query->orderByRaw("items.created_at desc NULLS LAST");
}
})
->where("is_publish", true)
->when($search, function ($query) use ($search) {
$query->where(function ($query) use ($search) {
$query->where('number', 'ILIKE', "%$search%")
->orWhere('name', 'ILIKE', "%$search%")
->orWhere('alias_name', 'ILIKE', "%$search%");
});
})
->when($brand_id, function ($query) use ($brand_id) {
$query->where('brand_id', $brand_id);
})
->when($gender_id, function ($query) use ($gender_id) {
$query->where('gender_id', $gender_id);
})
->when($event, function($query) use ($event){
$query->where('d.event', $event);
});
if ($category_id) {
$categories = StoreCategoryMap::where('store_category_id', $category_id)->get();
$builder->where(function ($query) use ($categories) {
$i = 0;
foreach ($categories as $category) {
if ($i == 0) {
$query->where(function ($query) use ($category) {
$query->where('item_dimension.category1', $category->category1)
->where('item_dimension.category2', $category->category2);
});
} else {
$query->orWhere(function ($query) use ($category) {
$query->where('item_dimension.category1', $category->category1)
->where('item_dimension.category2', $category->category2);
});
}
$i++;
}
});
}
return $builder->paginate($limit);
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace App\View\Components\Home;
use App\Repositories\Catalog\BrandRepository;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class BrandHome extends Component
{
public $brands;
public $template = 'fashion-v1';
/**
* Create a new component instance.
*/
public function __construct(BrandRepository $brandRepository)
{
$this->brands = $brandRepository->getList([]);
if ($this->brands->count() < 9) {
// Ensure we have at least 9 brands by duplicating if necessary
while ($this->brands->count() < 9) {
$this->brands = $this->brands->concat($this->brands);
}
$this->brands = $this->brands->take(9);
}
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
{
$view = 'components.home.brand-home-fashion-v1';
if ($this->template === 'fashion-v2') {
$view = 'components.home.brand-home-fashion-v2';
}
return view($view);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\View\Components\Home;
use App\Repositories\Catalog\ProductRepository;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class ProductHighlight extends Component
{
public $products;
public function __construct(ProductRepository $productRepository)
{
$params = [
'sort' => 'new',
];
$this->products = $productRepository->getList($params);
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
{
return view('components.home.product-highlight');
}
}

View File

@ -10,8 +10,10 @@
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.2", "php": "^8.2",
"awobaz/compoships": "^2.5",
"laravel/framework": "^12.0", "laravel/framework": "^12.0",
"laravel/tinker": "^2.10.1" "laravel/tinker": "^2.10.1",
"spatie/laravel-activitylog": "^4.10"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.23", "fakerphp/faker": "^1.23",

216
composer.lock generated
View File

@ -4,8 +4,70 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "88970a0117c062eed55fa8728fc43833", "content-hash": "39a129e1371f7351b7cd6beab65a522a",
"packages": [ "packages": [
{
"name": "awobaz/compoships",
"version": "2.5.4",
"source": {
"type": "git",
"url": "https://github.com/topclaudy/compoships.git",
"reference": "dcae8012a8704fc2acd8dce2d8a1b35ce292adbe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/topclaudy/compoships/zipball/dcae8012a8704fc2acd8dce2d8a1b35ce292adbe",
"reference": "dcae8012a8704fc2acd8dce2d8a1b35ce292adbe",
"shasum": ""
},
"require": {
"illuminate/database": ">=5.6 <13.0"
},
"require-dev": {
"ext-sqlite3": "*",
"fakerphp/faker": "^1.18",
"phpunit/phpunit": "^6.0|^8.0|^9.0|^10.0|^11.0|^12.0"
},
"suggest": {
"awobaz/blade-active": "Blade directives for the Laravel 'Active' package",
"awobaz/eloquent-auto-append": "Automatically append accessors to model serialization",
"awobaz/eloquent-mutators": "Reusable mutators (getters/setters) for Laravel 5's Eloquent",
"awobaz/syntactic": "Syntactic sugar for named and indexed parameters call."
},
"type": "library",
"autoload": {
"psr-4": {
"Awobaz\\Compoships\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Claudin J. Daniel",
"email": "cdaniel@awobaz.com"
}
],
"description": "Laravel relationships with support for composite/multiple keys",
"keywords": [
"laravel",
"laravel composite keys",
"laravel relationships"
],
"support": {
"issues": "https://github.com/topclaudy/compoships/issues",
"source": "https://github.com/topclaudy/compoships/tree/2.5.4"
},
"funding": [
{
"url": "https://paypal.me/awobaz",
"type": "custom"
}
],
"time": "2025-12-23T18:33:46+00:00"
},
{ {
"name": "brick/math", "name": "brick/math",
"version": "0.13.1", "version": "0.13.1",
@ -3271,6 +3333,158 @@
}, },
"time": "2025-06-25T14:20:11+00:00" "time": "2025-06-25T14:20:11+00:00"
}, },
{
"name": "spatie/laravel-activitylog",
"version": "4.10.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-activitylog.git",
"reference": "bb879775d487438ed9a99e64f09086b608990c10"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/bb879775d487438ed9a99e64f09086b608990c10",
"reference": "bb879775d487438ed9a99e64f09086b608990c10",
"shasum": ""
},
"require": {
"illuminate/config": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
"illuminate/database": "^8.69 || ^9.27 || ^10.0 || ^11.0 || ^12.0",
"illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
"php": "^8.1",
"spatie/laravel-package-tools": "^1.6.3"
},
"require-dev": {
"ext-json": "*",
"orchestra/testbench": "^6.23 || ^7.0 || ^8.0 || ^9.0 || ^10.0",
"pestphp/pest": "^1.20 || ^2.0 || ^3.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Spatie\\Activitylog\\ActivitylogServiceProvider"
]
}
},
"autoload": {
"files": [
"src/helpers.php"
],
"psr-4": {
"Spatie\\Activitylog\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
},
{
"name": "Sebastian De Deyne",
"email": "sebastian@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
},
{
"name": "Tom Witkowski",
"email": "dev.gummibeer@gmail.com",
"homepage": "https://gummibeer.de",
"role": "Developer"
}
],
"description": "A very simple activity logger to monitor the users of your website or application",
"homepage": "https://github.com/spatie/activitylog",
"keywords": [
"activity",
"laravel",
"log",
"spatie",
"user"
],
"support": {
"issues": "https://github.com/spatie/laravel-activitylog/issues",
"source": "https://github.com/spatie/laravel-activitylog/tree/4.10.2"
},
"funding": [
{
"url": "https://spatie.be/open-source/support-us",
"type": "custom"
},
{
"url": "https://github.com/spatie",
"type": "github"
}
],
"time": "2025-06-15T06:59:49+00:00"
},
{
"name": "spatie/laravel-package-tools",
"version": "1.92.7",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
"reference": "f09a799850b1ed765103a4f0b4355006360c49a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5",
"reference": "f09a799850b1ed765103a4f0b4355006360c49a5",
"shasum": ""
},
"require": {
"illuminate/contracts": "^9.28|^10.0|^11.0|^12.0",
"php": "^8.0"
},
"require-dev": {
"mockery/mockery": "^1.5",
"orchestra/testbench": "^7.7|^8.0|^9.0|^10.0",
"pestphp/pest": "^1.23|^2.1|^3.1",
"phpunit/php-code-coverage": "^9.0|^10.0|^11.0",
"phpunit/phpunit": "^9.5.24|^10.5|^11.5",
"spatie/pest-plugin-test-time": "^1.1|^2.2"
},
"type": "library",
"autoload": {
"psr-4": {
"Spatie\\LaravelPackageTools\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"role": "Developer"
}
],
"description": "Tools for creating Laravel packages",
"homepage": "https://github.com/spatie/laravel-package-tools",
"keywords": [
"laravel-package-tools",
"spatie"
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
"source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7"
},
"funding": [
{
"url": "https://github.com/spatie",
"type": "github"
}
],
"time": "2025-07-17T15:46:43+00:00"
},
{ {
"name": "symfony/clock", "name": "symfony/clock",
"version": "v7.3.0", "version": "v7.3.0",

View File

@ -13,7 +13,7 @@ return [
| |
*/ */
'default' => env('FILESYSTEM_DISK', 'local'), 'default' => env('FILESYSTEM_DISK', 'wms'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -47,6 +47,16 @@ return [
'report' => false, 'report' => false,
], ],
'wms' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('WMS_ASSET_URL'),
'visibility' => 'public',
'throw' => false,
'report' => false,
],
's3' => [ 's3' => [
'driver' => 's3', 'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'), 'key' => env('AWS_ACCESS_KEY_ID'),

View File

@ -1,49 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Schema::create('password_reset_tokens', function (Blueprint $table) {
$table->string('email')->primary();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->primary();
$table->foreignId('user_id')->nullable()->index();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->longText('payload');
$table->integer('last_activity')->index();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('users');
Schema::dropIfExists('password_reset_tokens');
Schema::dropIfExists('sessions');
}
};

View File

@ -1,35 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('cache', function (Blueprint $table) {
$table->string('key')->primary();
$table->mediumText('value');
$table->integer('expiration');
});
Schema::create('cache_locks', function (Blueprint $table) {
$table->string('key')->primary();
$table->string('owner');
$table->integer('expiration');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('cache');
Schema::dropIfExists('cache_locks');
}
};

View File

@ -1,57 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('jobs', function (Blueprint $table) {
$table->id();
$table->string('queue')->index();
$table->longText('payload');
$table->unsignedTinyInteger('attempts');
$table->unsignedInteger('reserved_at')->nullable();
$table->unsignedInteger('available_at');
$table->unsignedInteger('created_at');
});
Schema::create('job_batches', function (Blueprint $table) {
$table->string('id')->primary();
$table->string('name');
$table->integer('total_jobs');
$table->integer('pending_jobs');
$table->integer('failed_jobs');
$table->longText('failed_job_ids');
$table->mediumText('options')->nullable();
$table->integer('cancelled_at')->nullable();
$table->integer('created_at');
$table->integer('finished_at')->nullable();
});
Schema::create('failed_jobs', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('jobs');
Schema::dropIfExists('job_batches');
Schema::dropIfExists('failed_jobs');
}
};

View File

@ -0,0 +1,44 @@
<section class="container pb-5 mb-1 mb-sm-3 mb-lg-4 mb-xl-5">
<div class="swiper my-md-3"
data-swiper='{
"slidesPerView": 2,
"pagination": {
"el": ".swiper-pagination",
"clickable": true
},
"breakpoints": {
"500": {
"slidesPerView": 3
},
"768": {
"slidesPerView": 4,
"spaceBetween": 12
},
"992": {
"slidesPerView": 5,
"spaceBetween": 20
},
"1200": {
"slidesPerView": 6,
"spaceBetween": 24
}
}
}'>
<div class="swiper-wrapper">
<!-- Item -->
@foreach($brands as $brand)
<a class="swiper-slide text-body" href="#!" aria-label="{{ $brand->name }}">
<img src="{{ $brand->image_url }}" alt="{{ $brand->name }}" class="object-fit-contain">
</a>
@endforeach
</div>
<!-- Pagination (Bullets) -->
<div class="swiper-pagination position-static mt-3"></div>
</div>
</section>

View File

@ -0,0 +1,105 @@
<section class="container pt-5 mt-2 mt-sm-3 mt-lg-4 mt-xl-5">
<h3 class="text-center pb-2 pb-md-3">Shop by brand</h3>
<div class="row justify-content-center">
<div class="col-sm-10 col-md-12">
<div class="row g-0 border rounded-5 overflow-hidden">
<div class="col-8 col-md-4 d-flex flex-column border-end">
<a class="hover-effect-opacity position-relative d-block text-body border-bottom"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[0]->image_url }}" alt="{{ $brands[0]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[0]->image_dark_url ?? '/img/home/fashion/v2/brands/zara-dark.svg' }}" alt="{{ $brands[0]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
<a class="hover-effect-opacity position-relative d-block h-100 text-body" href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[1]->image_url ?? '/img/home/fashion/v2/brands/brooks-light.svg' }}" alt="{{ $brands[1]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[1]->image_dark_url ?? '/img/home/fashion/v2/brands/brooks-dark.svg' }}" alt="{{ $brands[1]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<div class="col-4 col-md-2 d-flex">
<div class="d-flex flex-column w-100">
<a class="hover-effect-opacity position-relative d-block border-bottom text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[2]->image_url }}" alt="{{ $brands[2]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[2]->image_dark_url }}" alt="{{ $brands[2]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
<a class="hover-effect-opacity position-relative d-block h-100 text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[3]->image_url }}" alt="{{ $brands[3]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[3]->image_dark_url }}" alt="{{ $brands[3]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<hr class="vr d-none d-md-block m-0">
</div>
<hr class="d-md-none m-0">
<div class="col-8 col-md-4">
<div class="row row-cols-2 g-0 border-bottom border-end">
<div class="col">
<a class="hover-effect-opacity position-relative d-block text-body" href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[4]->image_url}}" alt="{{ $brands[4]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[4]->image_dark_url }}" alt="{{ $brands[4]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<div class="col border-start">
<a class="hover-effect-opacity position-relative d-block h-100 text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[5]->image_url }}" alt="{{ $brands[5]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[5]->image_dark_url }}" alt="{{ $brands[5]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
</div>
<a class="hover-effect-opacity position-relative d-block h-100 border-end text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[6]->image_url }}" alt="{{ $brands[6]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[6]->image_dark_url }}" alt="{{ $brands[6]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<div class="col-4 col-md-2">
<a class="hover-effect-opacity position-relative d-block text-body border-bottom"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[7]->image_url }}" alt="{{ $brands[7]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[7]->image_dark_url }}" alt="{{ $brands[7]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
<a class="hover-effect-opacity position-relative d-block text-body" href="#!">
<img class="position-relative z-1 d-none-dark"
src="{{ $brands[8]->image_url }}" alt="{{ $brands[8]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<img class="position-relative z-1 d-none d-block-dark"
src="{{ $brands[8]->image_dark_url }}" alt="{{ $brands[8]->name }}" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5ZWNlZiIvPjx0ZXh0IHg9IjUwIiB5PSI1NSIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0IiBmaWxsPSIjNmM3NTdkIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5JbWFnZSBOb3QgRm91bmQ8L3RleHQ+PC9zdmc+'">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,88 @@
<section class="container pb-5 mb-2 mb-sm-3 mb-lg-4 mb-xl-5">
<h2 class="text-center pb-2 pb-sm-3">This week's highlights</h2>
<!-- Nav pills -->
<div class="row g-0 overflow-x-auto pb-2 pb-sm-3 mb-3">
<div class="col-auto pb-1 pb-sm-0 mx-auto">
<ul class="nav nav-pills flex-nowrap text-nowrap">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#!">Best sellers</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#!">New arrivals</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#!">Sale items</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#!">Top rated</a>
</li>
</ul>
</div>
</div>
<!-- Products grid -->
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-4 gy-4 gy-md-5 pb-xxl-3">
<!-- Item -->
@foreach ($products as $key => $product)
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<span
class="badge text-bg-danger position-absolute top-0 start-0 z-2 mt-2 mt-sm-3 ms-2 ms-sm-3">Sale</span>
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="{{ $product->image_url }}" loading="lazy" class="w-100 h-100 object-cover">
</div>
</a>
{{-- <div
class="hover-effect-target position-absolute start-0 bottom-0 w-100 z-2 opacity-0 pb-2 pb-sm-3 px-2 px-sm-3">
<div
class="d-flex align-items-center justify-content-center gap-2 gap-xl-3 bg-body rounded-2 p-2">
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">XS</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">S</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">M</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">L</span>
<div class="nav">
<a class="nav-link fs-xs text-body-tertiary py-1 px-2"
href="{{ route('second', ['shop', 'product-fashion']) }}">+3</a>
</div>
</div>
</div> --}}
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">{{ $product->name ?? '' }}</span>
</a>
</div>
<div class="h6 mb-2">Rp {{ number_format($product->display_price,0,",",".") }} @if ($product->display_discount_price > 0)<del class="fs-sm fw-normal text-body-tertiary">Rp {{ number_format($product->display_discount_price,0,",",".") }}</del>@endif</div>
<div class="position-relative">
@if ($product->variants->count() > 1)
<div class=" fs-xs text-body-secondary opacity-100">+{{ $product->variants->count() - 1 }} Varian</div>
@endif
{{-- <div class="hover-effect-target fs-xs text-body-secondary opacity-100">+1 color</div> --}}
{{-- <div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-1" id="color-1-1" checked>
<label for="color-1-1" class="btn btn-color fs-base" style="color: #284971">
<span class="visually-hidden">Dark denim</span>
</label>
<input type="radio" class="btn-check" name="colors-1" id="color-1-2">
<label for="color-1-2" class="btn btn-color fs-base" style="color: #8b9bc4">
<span class="visually-hidden">Light denim</span>
</label>
</div> --}}
</div>
</div>
</div>
@endforeach
</div>
</section>

View File

@ -1345,429 +1345,7 @@
<!-- Featured products --> <!-- Featured products -->
<section class="container pb-5 mb-2 mb-sm-3 mb-lg-4 mb-xl-5"> <x-home.product-highlight />
<h2 class="text-center pb-2 pb-sm-3">This week's highlights</h2>
<!-- Nav pills -->
<div class="row g-0 overflow-x-auto pb-2 pb-sm-3 mb-3">
<div class="col-auto pb-1 pb-sm-0 mx-auto">
<ul class="nav nav-pills flex-nowrap text-nowrap">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#!">Best sellers</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#!">New arrivals</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#!">Sale items</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#!">Top rated</a>
</li>
</ul>
</div>
</div>
<!-- Products grid -->
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-4 gy-4 gy-md-5 pb-xxl-3">
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<span
class="badge text-bg-danger position-absolute top-0 start-0 z-2 mt-2 mt-sm-3 ms-2 ms-sm-3">Sale</span>
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/01.png" alt="Image">
</div>
</a>
<div
class="hover-effect-target position-absolute start-0 bottom-0 w-100 z-2 opacity-0 pb-2 pb-sm-3 px-2 px-sm-3">
<div
class="d-flex align-items-center justify-content-center gap-2 gap-xl-3 bg-body rounded-2 p-2">
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">XS</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">S</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">M</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">L</span>
<div class="nav">
<a class="nav-link fs-xs text-body-tertiary py-1 px-2"
href="{{ route('second', ['shop', 'product-fashion']) }}">+3</a>
</div>
</div>
</div>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">Denim midi skirt with pockets</span>
</a>
</div>
<div class="h6 mb-2">$126.50 <del class="fs-sm fw-normal text-body-tertiary">$156.00</del></div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+1 color</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-1" id="color-1-1" checked>
<label for="color-1-1" class="btn btn-color fs-base" style="color: #284971">
<span class="visually-hidden">Dark denim</span>
</label>
<input type="radio" class="btn-check" name="colors-1" id="color-1-2">
<label for="color-1-2" class="btn btn-color fs-base" style="color: #8b9bc4">
<span class="visually-hidden">Light denim</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/08.png" alt="Image">
</div>
</a>
<div
class="hover-effect-target position-absolute start-0 bottom-0 w-100 z-2 opacity-0 pb-2 pb-sm-3 px-2 px-sm-3">
<div
class="d-flex align-items-center justify-content-center gap-2 gap-xl-3 bg-body rounded-2 p-2">
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">6.5</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">7</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">7.5</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">8</span>
<div class="nav">
<a class="nav-link fs-xs text-body-tertiary py-1 px-2"
href="{{ route('second', ['shop', 'product-fashion']) }}">+3</a>
</div>
</div>
</div>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">Leather sneakers with golden laces</span>
</a>
</div>
<div class="h6 mb-2">$74.00</div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+2 colors</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-8" id="color-8-1" checked>
<label for="color-8-1" class="btn btn-color fs-base" style="color: #b1aa9b">
<span class="visually-hidden">Cream</span>
</label>
<input type="radio" class="btn-check" name="colors-8" id="color-8-2">
<label for="color-8-2" class="btn btn-color fs-base" style="color: #496c33">
<span class="visually-hidden">Dark green</span>
</label>
<input type="radio" class="btn-check" name="colors-8" id="color-8-3">
<label for="color-8-3" class="btn btn-color fs-base" style="color: #364254">
<span class="visually-hidden">Black</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="#!">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/11.png" alt="Image">
</div>
</a>
<div
class="hover-effect-target position-absolute start-0 bottom-0 w-100 z-2 opacity-0 pb-2 pb-sm-3 px-2 px-sm-3">
<div
class="d-flex align-items-center justify-content-center gap-2 gap-xl-3 bg-body rounded-2 p-2">
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">S</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">M</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">L</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">XL</span>
<div class="nav">
<a class="nav-link fs-xs text-body-tertiary py-1 px-2" href="#!">+1</a>
</div>
</div>
</div>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0" href="#!">
<span class="text-truncate">Warm sweatshirts without a hoodie</span>
</a>
</div>
<div class="h6 mb-2">$32.99</div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+2 colors</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-11" id="color-11-1" checked>
<label for="color-11-1" class="btn btn-color fs-base" style="color: #42675f">
<span class="visually-hidden">Green</span>
</label>
<input type="radio" class="btn-check" name="colors-11" id="color-11-2">
<label for="color-11-2" class="btn btn-color fs-base" style="color: #476585">
<span class="visually-hidden">Blue</span>
</label>
<input type="radio" class="btn-check" name="colors-11" id="color-11-3">
<label for="color-11-3" class="btn btn-color fs-base" style="color: #724c74">
<span class="visually-hidden">Purple</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/04.png" alt="Image">
</div>
</a>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">Knitted bag with a wooden handle</span>
</a>
</div>
<div class="h6 mb-2">$105.00</div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+1 color</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-4" id="color-4-1" checked>
<label for="color-4-1" class="btn btn-color fs-base" style="color: #e7ddb4">
<span class="visually-hidden">Beige</span>
</label>
<input type="radio" class="btn-check" name="colors-4" id="color-4-2">
<label for="color-4-2" class="btn btn-color fs-base" style="color: #8b9bc4">
<span class="visually-hidden">Blue</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/09.png" alt="Image">
</div>
</a>
<div
class="hover-effect-target position-absolute start-0 bottom-0 w-100 z-2 opacity-0 pb-2 pb-sm-3 px-2 px-sm-3">
<div
class="d-flex align-items-center justify-content-center gap-2 gap-xl-3 bg-body rounded-2 p-2">
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">XS</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">S</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">M</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">L</span>
<div class="nav">
<a class="nav-link fs-xs text-body-tertiary py-1 px-2"
href="{{ route('second', ['shop', 'product-fashion']) }}">+3</a>
</div>
</div>
</div>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">White cotton blouse with necklace</span>
</a>
</div>
<div class="h6 mb-2">$38.50</div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+1 color</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-9" id="color-9-1" checked>
<label for="color-9-1" class="btn btn-color fs-base" style="color: #e0e5eb">
<span class="visually-hidden">White</span>
</label>
<input type="radio" class="btn-check" name="colors-9" id="color-9-2">
<label for="color-9-2" class="btn btn-color fs-base" style="color: #364254">
<span class="visually-hidden">Black</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/10.png" alt="Image">
</div>
</a>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">Leather handbag for women</span>
</a>
</div>
<div class="h6 mb-2">$140.00</div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+2 colors</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-10" id="color-10-1" checked>
<label for="color-10-1" class="btn btn-color fs-base" style="color: #869286">
<span class="visually-hidden">Olive</span>
</label>
<input type="radio" class="btn-check" name="colors-10" id="color-10-2">
<label for="color-10-2" class="btn btn-color fs-base" style="color: #364254">
<span class="visually-hidden">Black</span>
</label>
<input type="radio" class="btn-check" name="colors-10" id="color-10-3">
<label for="color-10-3" class="btn btn-color fs-base" style="color: #526f99">
<span class="visually-hidden">Blue</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<span
class="badge text-bg-danger position-absolute top-0 start-0 z-2 mt-2 mt-sm-3 ms-2 ms-sm-3">-17%</span>
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/05.png" alt="Image">
</div>
</a>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">Polarized sunglasses for men</span>
</a>
</div>
<div class="h6 mb-2">$96.00 <del class="fs-sm fw-normal text-body-tertiary">$112.00</del></div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+2 colors</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-5" id="color-5-1" checked>
<label for="color-5-1" class="btn btn-color fs-base" style="color: #8cc4ac">
<span class="visually-hidden">Green</span>
</label>
<input type="radio" class="btn-check" name="colors-5" id="color-5-2">
<label for="color-5-2" class="btn btn-color fs-base" style="color: #8cb7c4">
<span class="visually-hidden">Blue</span>
</label>
<input type="radio" class="btn-check" name="colors-5" id="color-5-3">
<label for="color-5-3" class="btn btn-color fs-base" style="color: #ccb782">
<span class="visually-hidden">Brown</span>
</label>
</div>
</div>
</div>
</div>
<!-- Item -->
<div class="col mb-2 mb-sm-3 mb-md-0">
<div class="animate-underline hover-effect-opacity">
<div class="position-relative mb-3">
<button type="button"
class="btn btn-icon btn-secondary animate-pulse fs-base bg-transparent border-0 position-absolute top-0 end-0 z-2 mt-1 mt-sm-2 me-1 me-sm-2"
aria-label="Add to Wishlist">
<i class="ci-heart animate-target"></i>
</button>
<a class="d-flex bg-body-tertiary rounded p-3" href="{{ route('second', ['shop', 'product-fashion']) }}">
<div class="ratio" style="--cz-aspect-ratio: calc(308 / 274 * 100%)">
<img src="/img/shop/fashion/06.png" alt="Image">
</div>
</a>
<div
class="hover-effect-target position-absolute start-0 bottom-0 w-100 z-2 opacity-0 pb-2 pb-sm-3 px-2 px-sm-3">
<div
class="d-flex align-items-center justify-content-center gap-2 gap-xl-3 bg-body rounded-2 p-2">
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">M</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">L</span>
<span class="fs-xs fw-medium text-secondary-emphasis py-1 px-sm-2">XL</span>
</div>
</div>
</div>
<div class="nav mb-2">
<a class="nav-link animate-target min-w-0 text-dark-emphasis p-0"
href="{{ route('second', ['shop', 'product-fashion']) }}">
<span class="text-truncate">Classic cotton men's shirt</span>
</a>
</div>
<div class="h6 mb-2">$27.00</div>
<div class="position-relative">
<div class="hover-effect-target fs-xs text-body-secondary opacity-100">+3 colors</div>
<div class="hover-effect-target d-flex gap-2 position-absolute top-0 start-0 opacity-0">
<input type="radio" class="btn-check" name="colors-6" id="color-6-1" checked>
<label for="color-6-1" class="btn btn-color fs-base" style="color: #c1cde7">
<span class="visually-hidden">Blue</span>
</label>
<input type="radio" class="btn-check" name="colors-6" id="color-6-2">
<label for="color-6-2" class="btn btn-color fs-base" style="color: #526f99">
<span class="visually-hidden">Dark blue</span>
</label>
<input type="radio" class="btn-check" name="colors-6" id="color-6-3">
<label for="color-6-3" class="btn btn-color fs-base" style="color: #e0e5eb">
<span class="visually-hidden">White</span>
</label>
<input type="radio" class="btn-check" name="colors-6" id="color-6-4">
<label for="color-6-4" class="btn btn-color fs-base" style="color: #364254">
<span class="visually-hidden">Black</span>
</label>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Special collection carousel --> <!-- Special collection carousel -->
<section class="container pb-5 mb-2 mb-sm-3 mb-lg-4 mb-xl-5"> <section class="container pb-5 mb-2 mb-sm-3 mb-lg-4 mb-xl-5">
@ -1886,87 +1464,7 @@
<!-- Brands --> <!-- Brands -->
<section class="container pb-5 mb-1 mb-sm-3 mb-lg-4 mb-xl-5"> <x-home.brand-home template="fashion-v1" />
<div class="swiper my-md-3"
data-swiper='{
"slidesPerView": 2,
"pagination": {
"el": ".swiper-pagination",
"clickable": true
},
"breakpoints": {
"500": {
"slidesPerView": 3
},
"768": {
"slidesPerView": 4,
"spaceBetween": 12
},
"992": {
"slidesPerView": 5,
"spaceBetween": 20
},
"1200": {
"slidesPerView": 6,
"spaceBetween": 24
}
}
}'>
<div class="swiper-wrapper">
<!-- Item -->
<a class="swiper-slide text-body" href="#!" aria-label="Brooks">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 196 64" fill="currentColor">
<path fill-rule="evenodd"
d="M67.948 22.154c.155.003.33-.006.515-.016 1.226-.065 2.921-.155 2.515 3.051-.516 4.184-1.79 4.467-2.733 4.677l-.041.009-.06.014c-.209-.027-.342-.088-.454-.14l-.132-.056-14.174-7.832c-.665-.346-.79.119-.587.392l8.016 8.616c-11.176 1.731-20.193 11.654-20.528 12.14-.378.442-.414.798.098.783h11.046c2.662-6.303 14.636-11.3 16.422-11.259.603-.041 2.599.067 1.76 4.699-.802 4.647-3.082 5.146-4.203 5.189-.696-.042-1.088-.47-.978-1.371l1.368-6.951c-1.264.535-4.65 2.105-5.376 2.643l-.782 4.797c-.156.683-.631.761-1.235.859l-.134.022c-.759.171-1.258 1.493-.098 1.468l3.652-.192h.001 0 0l.061-.004a110 110 0 0 1 2.388.202l1.034.092c3.464.212 8.382-1.108 9.286-6.853.272-1.609-.013-4.535-3.03-5.776-.332-.008-.261-.294-.098-.294.194 0 3.864-1.498 4.301-5.189.635-4.818-3.965-5.305-5.669-5.189l-4.496.196-.794-.034c-.858-.04-1.965-.091-2.92-.064-.919-.036-1.096 1.392 0 1.371.756.021 1.149.485 1.075 1.273l-.391 2.252 4.301 2.448 1.075-5.972zM120.538 20c-2.894.034-9.024 3.246-10.557 11.553-1.603 8.397 1.248 12.466 6.06 12.727 4.738.168 9.3-3.83 11.046-11.161 1.675-7.374-2.315-13.085-6.549-13.119zm-.754 4.735c-1.744.021-5.374 1.981-6.311 7.052-.921 5.125.768 7.609 3.59 7.768 2.835.103 5.537-2.338 6.543-6.812 1.021-4.501-1.343-7.987-3.822-8.008zM102.259 20c-2.944.034-9.073 3.246-10.655 11.553-1.554 8.397 1.297 12.466 6.06 12.727 4.787.168 9.348-3.83 11.046-11.161 1.724-7.374-2.266-13.085-6.451-13.119zm-.78 4.735c-1.744.021-5.374 1.981-6.311 7.052-.921 5.125.768 7.609 3.59 7.768 2.836.102 5.538-2.338 6.543-6.812 1.021-4.501-1.342-7.987-3.821-8.008zm41.249 19.055c.9.194 3.018.576 4.496.49 1.699-.046 6.254-1.175 8.016-6.266 1.453-4.417-1.398-7.273-2.053-7.832-.064-.059-.157-.142-.273-.245-1.023-.912-3.814-3.401-3.833-4.944.021-1.513 1.196-3.138 3.031-3.133 1.871-.005 2.477 2.493 2.834 4.797.106.835.963 1.123 1.076.392l.879-4.699c.041-.46.005-.638-.195-.783h-.001c-.94-.641-1.724-1.176-4.105-1.174-2.465.07-5.85 1.819-6.94 4.014-1.851 3.795-.086 7.051.587 7.832.752.788 3.421 3.329 3.421 3.329.933 1.134 2.25 3.206.489 6.07a3.18 3.18 0 0 1-1.236 1.062c-.498.24-1.049.347-1.599.309-.893-.059-2.319-.201-2.444-5.874-.016-1.251-1.372-1.465-1.759 0l-.88 4.993c-.051-.169-.117-.332-.196-.489l-4.007-13.413 1.564-1.86c3.444-4.117 5.047-4.331 5.865-4.308 1 .055.751-1.309.099-1.273-.321-.018-.857-.009-1.365 0-.491.009-.957.017-1.178 0-.27.018-.954.009-1.665 0h-1.854c-.771-.036-.95 1.32.098 1.273 1.019-.023.806 1.189.391 1.664l-6.061 7.245c-.153.17-.474.098-.391-.196l1.271-7.245c.215-.884 1.07-1.421 1.857-1.469.78-.023.675-1.309 0-1.273-1.236-.027-2.346.026-3.179.066l-.731.032-.816-.034c-.86-.04-1.958-.09-2.898-.064-.932-.036-.968 1.356.097 1.371.789-.015 1.038.485.978 1.273l-3.324 18.112c-.169.691-.654.762-1.341.863l-.125.019c-.674.171-1.173 1.493 0 1.468l3.526-.185h0l.189-.011c.227.014.639.03 1.111.049h.001c.995.04 2.254.09 2.602.147.557-.011.878-1.046.098-1.273-.859-.273-1.393-.666-1.271-1.566l1.564-8.028h.88l2.444 8.322.021.133.001.002c.108.657.161.975-.511 1.039-.815.109-.958 1.287-.098 1.273.78.015 2.561-.057 3.421-.099l.463.027h0c.768.047 1.79.11 2.665.072.074.007.139.004.195.001.037-.002.071-.003.099-.001zM81.633 33.315h1.271l1.564 9.986c.057.326.2.504.489.489h5.474c.831.015.759-1.233 0-1.371-.81-.149-1.093-.684-1.271-1.567L88.183 34c-.2-1.296-1.02-1.653-1.955-1.666-.275.013-.205-.273 0-.294.151.021 5.212-1.3 5.572-6.168.424-4.841-4.244-5.305-5.963-5.189a172.57 172.57 0 0 1-4.496.196l-.789-.034h0c-.847-.04-1.936-.091-2.828-.064-1.004-.036-1.181 1.392-.098 1.371.771.021 1.162.485 1.075 1.273l-3.324 18.112c-.143.685-.619.761-1.236.86l-.132.021c-.745.171-1.243 1.493-.098 1.468l3.715-.196c.236.014.652.03 1.128.049 1.009.04 2.288.09 2.684.147.487-.011.806-1.046 0-1.273-.832-.272-1.367-.666-1.271-1.566l1.466-7.733zm2.053-11.161a11.27 11.27 0 0 0 .333-.001c1.191-.014 2.793-.034 2.6 3.428-.204 3.983-1.898 6.107-4.692 6.07l1.76-9.497z" />
</svg>
</a>
<!-- Item -->
<a class="swiper-slide text-body" href="#!" aria-label="Fila">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 196 64" fill="currentColor">
<path
d="M91.079 41.202c0 1.904-1.653 3.448-3.691 3.448s-3.692-1.544-3.692-3.448V23.753c0-1.904 1.653-3.448 3.692-3.448s3.691 1.543 3.691 3.448v17.449zM61.692 27.277c-2.039 0-3.692-1.544-3.692-3.448s1.653-3.448 3.692-3.448h15.907c2.038 0 3.691 1.544 3.691 3.448s-1.653 3.448-3.691 3.448H61.692zm14.847 8.915c2.038 0 3.691-1.544 3.691-3.448s-1.653-3.448-3.691-3.448H61.774c-2.039 0-3.691 1.543-3.691 3.448v8.458c0 1.904 1.653 3.448 3.691 3.448s3.692-1.544 3.692-3.448v-5.029l11.073.02zm55.224 8.486c3.249 0 5.883-2.499 5.883-5.534 0-1.138-.371-2.195-1.005-3.073l-9.531-14.5c-.657-.946-1.799-1.572-3.097-1.572-1.339 0-2.511.666-3.158 1.663l-10.301 15.501h-9.523V23.829c0-1.905-1.653-3.448-3.692-3.448s-3.691 1.544-3.691 3.448v17.372c0 1.904 1.653 3.448 3.691 3.448h13.582c1.673.018 3.344-.858 4.568-2.649l8.524-12.762 5.71 8.495-7.994.019c-2.038 0-3.691 1.543-3.691 3.448s1.653 3.448 3.691 3.448l10.034.029z" />
</svg>
</a>
<!-- Item -->
<a class="swiper-slide text-body" href="#!" aria-label="Zara">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 196 64" fill="currentColor">
<path
d="M137.486 48.905l-13.038-35.881-.008-.024h-.258l-2.685 7.374-4.887 13.424-.012-.011c-1.694-1.494-4.084-2.428-7.094-2.776l-.918-.095.911-.117c4.964-.892 8.3-4.025 8.3-7.801 0-5.177-4.871-8.791-11.849-8.791H91.429v.262h4.219v26.752L85.402 13.024 85.393 13h-.257l-2.685 7.374-10.355 28.439-.064.007a11.2 11.2 0 0 1-.525.052c-.26.02-.519.033-.779.033H60.264L80.153 14.47l.148-.259H55.976v10.652h.258c.046-5.189 3.069-10.394 9.748-10.394h8.058L54 49.163h26.997V38.957h-.258c-.035 4.522-2.6 8.818-8.177 9.788l-.177.03 4.247-11.67H88.53l4.287 11.8h-4.229v.258h16.6v-.258h-4.247V31.106h4.901c4.987 0 7.848 2.227 7.848 6.109v3.157c0 .348.023.857.049 1.282v.015l-2.634 7.234h-3.441v.258h7.123v-.258h-3.404l2.399-6.587.007.102.066.594.064.393c.4 2.429 1.33 4.215 2.762 5.307l.206.149c1.088.756 2.439 1.139 4.02 1.139 2.093 0 3.489-.522 4.642-1.75l-.151-.142c-1.062.98-1.953 1.377-3.07 1.377-1.902 0-2.898-2.307-2.898-4.581V40.48c.01-1.098-.162-2.189-.509-3.231l-.047-.137v-.005h8.703l4.287 11.8h-4.229v.258H142v-.258l-4.514-.002zM76.727 36.848l5.861-16.097 5.848 16.097h-11.71zm24.216-6V14.47h3.741c4.998 0 7.636 2.97 7.636 8.584 0 5.972-1.515 7.793-6.478 7.793h-4.899zm17.83 6l-.026-.064a8 8 0 0 0-1.659-2.531l-.245-.245-.026-.025 4.814-13.232 5.849 16.097h-8.707z" />
</svg>
</a>
<!-- Item -->
<a class="swiper-slide text-body" href="#!" aria-label="New Balance">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 196 64" fill="currentColor">
<path
d="M79.909 30.295l10.34-.366-.522.907-9.818-.542zm-1.261 2.158l10.364-.366-.51.91-9.854-.544zm-1.224 2.17l10.351-.361-.509.904-9.842-.543zm-1.224 2.17l10.364-.367-.534.909-9.831-.542zm9.837-17.287l13.197-.466.037 1.196-13.235-.73zm1.258-2.195l11.855-.413.037 1.09-11.893-.677zm1.208-2.133l10.563-.345.051.93-10.614-.585zm1.233-2.158l9.259-.307.037.852-9.295-.545zM90.881 11h8.053l.012.425L90.881 11zM74.976 38.962l10.339-.372-.211.372H74.976zm30.478-27.893h14.901c5.791.012 7.033 3.443 6.289 6.799-.821 3.695-4.971 6.367-7.357 6.91 4.275 1.382 4.275 4.146 3.379 7.206s-5.666 6.91-10.984 6.91H91.624l-.025-.593 6.151-.221c.124 0 .124-.148.037-.161l-6.213-.343-.049-1.38 7.444-.264c.149 0 .124-.16.037-.172l-7.519-.415-.038-1.255 8.749-.305c.149 0 .112-.173.025-.185l-8.823-.487-.05-1.144 10.102-.356c.137 0 .1-.148.026-.16l-10.165-.561-.037-1.022 11.408-.404c.149 0 .087-.16.025-.173l-21.474-1.184 22.668-.801c.185-.012.099-.173.012-.185L82.44 25.939l22.704-.814c.149 0 .125-.16.025-.16L83.695 23.78l22.666-.802c.15 0 .162-.173.026-.173L84.913 21.62l22.63-.753c.15 0 .136-.136.025-.148l-7.381-.407.758-1.302 7.854-.278c.149 0 .161-.148 0-.16l-7.369-.419.745-1.318 7.854-.273c.161 0 .161-.136 0-.148l-7.394-.408.732-1.261 7.867-.257c.087 0 .112-.136.012-.148l-7.406-.434.758-1.316 7.854-.261c.125 0 .125-.123.037-.123l-7.456-.393.422-.743zm-1.352 21.43h6.164c4.324 0 6.611-6.12 1.889-6.12h-4.573l-3.48 6.12zm10.563-10.514c1.887 0 3.379-1.876 3.579-2.616s.098-2.418-2.884-2.517h-2.336l-2.933 5.133h4.574zm23.893 21.419c2.389 0 4.375 1.986 4.375 4.358 0 .308-.032.539-.11 1.016h-6.545c.295.986 1.21 1.679 2.233 1.679.808 0 1.396-.323 1.846-1.031h2.265c-.512 1.679-2.234 2.91-4.048 2.91-.587.002-1.169-.11-1.712-.332a4.45 4.45 0 0 1-1.452-.961c-.415-.412-.744-.902-.968-1.441s-.338-1.117-.335-1.7c0-2.479 2.001-4.497 4.451-4.497zm.031 1.87c-1.147 0-2.078.739-2.372 1.894h4.699c-.279-1.17-1.178-1.894-2.327-1.894zm-25.059-.767v-.692h2.064v8.321h-1.893v-1.093c-.79.893-1.628 1.145-2.729 1.145-2.497 0-4.182-2.085-4.182-4.41 0-2.464 1.904-4.358 4.138-4.358 1.008 0 1.951.394 2.602 1.087zm-4.15 5.161a2.61 2.61 0 0 0 3.678 0c.487-.484.761-1.141.761-1.826s-.274-1.342-.761-1.826a2.61 2.61 0 0 0-3.678 0 2.57 2.57 0 0 0 0 3.652zm-54.472-5.247c.714-.724 1.365-1.017 2.218-1.017 1.163 0 2.295.693 2.776 1.709.326.678.419 1.247.419 2.449v4.574h-2.063v-4.173c0-1.047-.155-2.68-1.582-2.68-1.52 0-1.613 1.741-1.613 2.834v4.02H53v-8.532h1.908v.816zm10.661-1.016a4.41 4.41 0 0 1 4.374 4.358c0 .308-.031.539-.109 1.016h-6.545c.295.986 1.21 1.679 2.233 1.679.807 0 1.396-.323 1.846-1.031h2.264c-.512 1.679-2.233 2.91-4.048 2.91-.587.002-1.169-.111-1.712-.333a4.45 4.45 0 0 1-1.452-.961c-.415-.412-.744-.902-.968-1.441a4.39 4.39 0 0 1-.335-1.7c0-2.479 2.001-4.497 4.451-4.497zm.032 1.87c-1.148 0-2.079.739-2.373 1.894h4.7c-.279-1.17-1.179-1.894-2.327-1.894zm40.344 6.854h-2.062v-11.38h2.062v11.38zm12.873-7.708c.713-.724 1.365-1.017 2.218-1.017 1.164 0 2.296.693 2.776 1.709.326.678.419 1.247.419 2.449v4.574h-2.063v-4.173c0-1.047-.155-2.68-1.582-2.68-1.52 0-1.612 1.741-1.612 2.834v4.02h-2.064v-8.532h1.908v.816zm12.563 2.033c-.512-.862-1.055-1.17-2.001-1.17-1.365 0-2.388 1.093-2.388 2.586 0 1.479 1.069 2.587 2.512 2.587.776 0 1.395-.385 1.877-1.124h2.326c-.279.754-.435 1.031-.869 1.509-.429.468-.951.842-1.533 1.099a4.63 4.63 0 0 1-1.848.395c-2.497 0-4.529-2.033-4.529-4.496 0-2.449 2.017-4.435 4.529-4.435 1.986 0 3.614 1.217 4.25 3.049h-2.326zm-55.014-2.848l1.461 5.205 1.762-5.205h1.706l-2.751 8.531h-1.387l-1.628-5.528-1.675 5.528h-1.322l-2.869-8.531h1.82l1.746 5.205 1.477-5.205h1.66zm9.91.895c.651-.693 1.594-1.087 2.602-1.087 2.234 0 4.138 1.894 4.138 4.358 0 2.325-1.684 4.41-4.182 4.41-1.101 0-1.939-.252-2.73-1.145v1.093h-1.892v-11.38h2.063V44.5zm.473 5.168a2.61 2.61 0 0 0 3.678 0c.488-.484.762-1.141.762-1.826s-.274-1.342-.762-1.826a2.61 2.61 0 0 0-3.678 0c-.488.484-.762 1.141-.762 1.826s.274 1.342.762 1.826zm13.692-5.161v-.692h2.063v8.321h-1.892v-1.093c-.791.893-1.629 1.145-2.73 1.145-2.497 0-4.182-2.085-4.182-4.41 0-2.464 1.905-4.358 4.138-4.358 1.008 0 1.951.394 2.602 1.087zm-4.15 5.161a2.61 2.61 0 0 0 3.678 0c.488-.484.762-1.141.762-1.826s-.274-1.342-.762-1.826a2.61 2.61 0 0 0-3.678 0c-.488.484-.762 1.141-.762 1.826s.274 1.342.762 1.826z" />
</svg>
</a>
<!-- Item -->
<a class="swiper-slide text-body" href="#!" aria-label="Puma">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 196 64" fill="currentColor">
<path
d="M82.282 40.849c0 .669.556 1.211 1.211 1.226.658-.015 1.214-.557 1.214-1.226L84.713 19h7.141v24.085c0 1.18-.938 2.144-2.111 2.144H77.249c-1.165 0-2.114-.963-2.114-2.144V19h7.148l-.002 21.849zM96.607 19h10.818 10.821c1.28 0 2.324 1.049 2.324 2.352v23.877h-7.154V23.327c-.006-.671-.552-1.203-1.213-1.203s-1.202.519-1.21 1.184v21.921h-7.127V23.308c-.015-.665-.55-1.184-1.218-1.184s-1.204.531-1.209 1.203v21.902h-7.155V21.352c0-1.303 1.043-2.352 2.323-2.352zm-32.248 3.124a1.23 1.23 0 0 1 1.21 1.249v10.786c.005.726-.58 1.231-1.21 1.231h-1.214V22.124h1.214zm-1.214 16.513h7.221c1.297 0 2.343-1.054 2.343-2.362V21.362c0-1.307-1.007-2.362-2.297-2.362H56v26.229h7.145v-6.591zm69.42-15.319v12.077h-2.428V23.337a1.21 1.21 0 0 1 1.211-1.199c.666 0 1.2.512 1.217 1.18zm0 15.326v6.585h7.145V21.352c0-1.303-1.043-2.352-2.326-2.352h-12.065c-1.28 0-2.323 1.049-2.323 2.352v23.877h7.141v-6.585h2.428z" />
</svg>
</a>
<!-- Item -->
<a class="swiper-slide text-body" href="#!" aria-label="Dior">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 196 64" fill="currentColor">
<path
d="M56.667 14.837l-1.71-.087-.705-.139-.141-.262c0-.244.176-.348.529-.348h17.684c8.287 0 14.105 2.492 17.49 7.494 1.939 2.893 2.909 6.327 2.909 10.301a18.67 18.67 0 0 1-.97 6.013c-.74 2.039-1.763 3.835-3.085 5.439-1.446 1.69-3.209 2.998-5.237 3.956-2.169.976-4.602 1.481-7.334 1.481h-22.55c-.37 0-.547-.122-.547-.331 0-.227.265-.348.758-.348l4.32-.261c.67-.088 1.146-.28 1.375-.541l.441-.61c.159-.418.247-1.045.265-1.899V17.05c0-1.081-.617-1.743-1.816-2.005l-1.676-.209zm9.521.471l-.124.697v30.693c0 .348.071.592.212.68l.705.104h2.327l5.395-.192c1.446-.157 2.68-.383 3.65-.697.965-.348 1.868-.841 2.68-1.463.705-.575 1.428-1.395 2.222-2.44 1.322-1.708 2.274-3.887 2.856-6.553.352-1.742.529-3.433.529-5.054 0-1.429-.212-2.963-.652-4.619-.617-2.388-1.552-4.479-2.874-6.257-2.556-3.451-6.753-5.159-12.553-5.159h-3.579c-.405-.036-.67.052-.793.261zm30.008 33.116c-.035-.209.141-.296.529-.296l1.234-.035c.67-.087 1.076-.313 1.234-.662l.229-1.255V36.048c0-.383-.141-.68-.406-.854l-.917-.088-1.234.332-.67-.035c-.088-.209.176-.401.793-.575 1.463-.383 2.751-.871 3.844-1.481.67-.383 1.146-.593 1.357-.68l.529-.052c.177.034.265.383.265 1.01v12.758c0 .609.141 1.046.406 1.307.317.314 1.058.471 2.204.471.405 0 .616.088.652.279 0 .158-.123.21-.335.21h-9.398c-.212.001-.317-.086-.317-.225zm41.609-12.549c-.864.889-1.445 1.934-1.763 3.189v7.408c0 .662.229 1.133.705 1.429l1.076.191 1.128.122c.265.035.371.088.371.227l-.052.122-.3.088h-9.433c-.282 0-.44-.088-.44-.227l.264-.209 1.587-.122c.616-.105 1.005-.313 1.216-.627l.265-.784V36.223l-.177-.767-.299-.174c-.088-.087-.229-.139-.441-.174-.264-.017-.582.035-.916.174l-.899.244-.512-.122c-.088-.122-.053-.209.07-.261l.758-.314c1.728-.505 3.121-1.028 4.091-1.568l1.199-.645.529.034.211.436v3.834c1.323-2.126 2.381-3.433 3.104-3.869.44-.261.864-.471 1.181-.557l.617-.052c.388-.035.829.087 1.322.401.67.383 1.023.958 1.058 1.69.035.611-.142 1.082-.529 1.447-.353.296-.706.384-1.023.296-.299-.052-.529-.174-.687-.348l-.494-.609c-.388-.558-.758-.733-1.198-.575-.514.138-1.042.522-1.589 1.132zm-36.848-14.327c-.653 0-1.182.227-1.622.662-.476.436-.705.993-.671 1.639-.035.61.194 1.133.671 1.569.44.436.969.662 1.622.662.616 0 1.163-.227 1.604-.662s.687-.958.687-1.569a2.25 2.25 0 0 0-.687-1.639c-.441-.436-.988-.662-1.604-.662zm9.344 13.908a8.07 8.07 0 0 1 2.38-2.091 7.87 7.87 0 0 1 2.575-.959l3.262-.191c1.18.052 2.274.279 3.262.714 2.38 1.046 3.878 2.964 4.442 5.752.582 2.824.089 5.212-1.464 7.146-1.321 1.638-3.067 2.684-5.271 3.137-2.309.506-4.46.348-6.4-.435-2.522-1.011-4.055-3.016-4.549-5.944-.441-2.771.141-5.124 1.763-7.129zm10.331-.784c-1.075-1.185-2.433-1.708-4.073-1.569-1.586.157-2.802 1.028-3.596 2.684-.722 1.499-.988 3.33-.722 5.491.193 2.144.881 3.852 1.991 5.159 1.182 1.377 2.522 1.952 4.02 1.691a4.76 4.76 0 0 0 3.474-2.527c.74-1.429 1.004-3.277.828-5.63-.211-2.353-.828-4.097-1.922-5.299zm-24.559.767v.174l-.388-.244v.087l.035.157h-.053v-.332h.018l.352.262v-.262h.071l-.035.157z" />
</svg>
</a>
</div>
<!-- Pagination (Bullets) -->
<div class="swiper-pagination position-static mt-3"></div>
</div>
</section>
<!-- Reviews carousel --> <!-- Reviews carousel -->

View File

@ -2170,112 +2170,7 @@
</section> </section>
<!-- Brands --> <x-home.brand-home template="fashion-v2" />
<section class="container pt-5 mt-2 mt-sm-3 mt-lg-4 mt-xl-5">
<h3 class="text-center pb-2 pb-md-3">Shop by brand</h3>
<div class="row justify-content-center">
<div class="col-sm-10 col-md-12">
<div class="row g-0 border rounded-5 overflow-hidden">
<div class="col-8 col-md-4 d-flex flex-column border-end">
<a class="hover-effect-opacity position-relative d-block text-body border-bottom"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/zara-light.svg" alt="Zara">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/zara-dark.svg" alt="Zara">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
<a class="hover-effect-opacity position-relative d-block h-100 text-body" href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/brooks-light.svg" alt="Brooks">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/brooks-dark.svg" alt="Brooks">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<div class="col-4 col-md-2 d-flex">
<div class="d-flex flex-column w-100">
<a class="hover-effect-opacity position-relative d-block border-bottom text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/fila-light.svg" alt="Fila">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/fila-dark.svg" alt="Fila">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
<a class="hover-effect-opacity position-relative d-block h-100 text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/adidas-light.svg" alt="Adidas">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/adidas-dark.svg" alt="Adidas">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<hr class="vr d-none d-md-block m-0">
</div>
<hr class="d-md-none m-0">
<div class="col-8 col-md-4">
<div class="row row-cols-2 g-0 border-bottom border-end">
<div class="col">
<a class="hover-effect-opacity position-relative d-block text-body" href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/hermes-light.svg" alt="Hermes">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/hermes-dark.svg" alt="Hermes">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<div class="col border-start">
<a class="hover-effect-opacity position-relative d-block h-100 text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/dior-light.svg" alt="Dior">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/dior-dark.svg" alt="Dior">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
</div>
<a class="hover-effect-opacity position-relative d-block h-100 border-end text-body"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/newbalance-light.svg" alt="New Balance">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/newbalance-dark.svg" alt="New Balance">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
<div class="col-4 col-md-2">
<a class="hover-effect-opacity position-relative d-block text-body border-bottom"
href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/puma-light.svg" alt="Puma">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/puma-dark.svg" alt="Puma">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
<a class="hover-effect-opacity position-relative d-block text-body" href="#!">
<img class="position-relative z-1 d-none-dark"
src="/img/home/fashion/v2/brands/hm-light.svg" alt="H & M">
<img class="position-relative z-1 d-none d-block-dark"
src="/img/home/fashion/v2/brands/hm-dark.svg" alt="H & M">
<span
class="hover-effect-target position-absolute top-0 start-0 w-100 h-100 bg-body-tertiary opacity-0"></span>
</a>
</div>
</div>
</div>
</div>
</section>
<!-- Instagram feed --> <!-- Instagram feed -->

View File

@ -1,12 +1,15 @@
<?php <?php
use App\Http\Controllers\HomeController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RoutingController; use App\Http\Controllers\RoutingController;
Route::group(['prefix' => '/'], function () { Route::group(['prefix' => '/dummy'], function () {
Route::get('', [RoutingController::class, 'index'])->name('root'); Route::get('', [RoutingController::class, 'index'])->name('root');
Route::get('{first}/{second}/{third}', [RoutingController::class, 'thirdLevel'])->name('third'); Route::get('{first}/{second}/{third}', [RoutingController::class, 'thirdLevel'])->name('third');
Route::get('{first}/{second}', [RoutingController::class, 'secondLevel'])->name('second'); Route::get('{first}/{second}', [RoutingController::class, 'secondLevel'])->name('second');
Route::get('{any}', [RoutingController::class, 'root'])->name('any'); Route::get('{any}', [RoutingController::class, 'root'])->name('any');
}); });
Route::get('/', [HomeController::class, 'index'])->name('home');